【问题标题】:Spring boot getting (and editing) an entity with multiple path variablesSpring Boot 获取(和编辑)具有多个路径变量的实体
【发布时间】:2021-07-17 19:40:41
【问题描述】:

我的情况与这里的问题非常相似:Spring boot how to edit entity

我有一个“项目”实体,我想为其编辑多个属性(可能是一个,也可能是所有属性)——但关键是。我知道BeanUtils.copyProperties(sourceItem, targetItem, "id"); 非常适合这种情况。从我链接的问题中,我还进一步看到进行此编辑的一种方法是简单地通过在控制器中创建一个更新方法,如下所示:

@PutMapping("/{id}")
public ResponseEntity<?> update(@PathVariable("id") Item targetItem, @RequestBody Item sourceItem) {
    BeanUtils.copyProperties(sourceItem, targetItem, "id");
    return ResponseEntity.ok(repo.save(targetItem));
}

我面临的问题是我有多个路径变量。因此,要编辑该项目,我宁愿需要 @PutMapping("/{id1}/{id2}/{id3}") 之类的东西,因为该项目本身已链接到其他项目。

因此我尝试做的(基于链接的问题)是:

@PutMapping("/{id1}/{id2}/{id3}")
public ResponseEntity<?> update(@PathVariable("id1/id2/id3") Item targetItem, @RequestBody Item sourceItem) {
    BeanUtils.copyProperties(sourceItem, targetItem, "id3");
    return ResponseEntity.ok(repo.save(targetItem));
}

我认为错误部分是@PathVariable("id1/id2/id3"),因为 IDE 确实告诉我找不到路径。

我想知道您是否可以想出一种处理多变量问题的优雅方式 - 我觉得使用 BeanUtils.copyProperties() 是一种编辑内容的简洁方式,我很乐意保持原样。

【问题讨论】:

    标签: java spring spring-data-jpa entity path-variables


    【解决方案1】:

    我认为你应该映射到 3 个不同的路径变量:

    @PutMapping("/{id1}/{id2}/{id3}")
    public ResponseEntity<?> update(@PathVariable("id1") Item targetItem1
    @PathVariable("id2") Item targetItem2, @PathVariable("id3") Item targetItem3, @RequestBody Item sourceItem) {
        BeanUtils.copyProperties(sourceItem, targetItem1, "id");
        return ResponseEntity.ok(repo.save(targetItem1));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 2022-10-13
      • 2015-03-15
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多