Spring Boot 获取和编辑具有多个路径变量的实体

问题描述

我的情况与这里的问题非常相似: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,"id");
    return ResponseEntity.ok(repo.save(targetItem));
}

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

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

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

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

我想知道您是否能想出一种优雅的方式来处理多变量问题 - 我觉得使用 BeanUtils.copyProperties() 是一种简洁的编辑方式,我很乐意保持这种方式的完整性。

>

解决方法

我认为您应该映射到 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));
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...