我有一个包含多个字段的实体类型。其中一些是对其他实体的引用。我想在Spring中创建一个Rest API端点,允许用户更新这种类型的实体。
假设我有一个包含朋友列表的实体User
。我只想让用户更新用户实体的某些特定字段,例如name
,age
和description
,而不是朋友列表。
此外,我只希望更新实体的那些属性,相应的传入值不为空。
public class UserController {
@RequestMapping(path="",method=RequestMethod.PUT)
public void update(@RequestBody User user) {
userService.save(user);
}
}
我怎样才能做到这一点?
答案 0 :(得分:1)
您可以使用DTO
类来定义您需要更改的属性,而不是将User
对象作为update()
方法中的参数。
像这样定义一个类UpdateUserDTO
public class UpdateUserDTO {
private String name;
private String description;
//other fields you want the clients to change.
...
}
现在,这个UpdateUserDTO可以用作更新方法中的数据传输对象。
public class UserController {
@RequestMapping(path="",method=RequestMethod.PUT)
public void update(@RequestBody UpdateUserDTO dto) {
//validate your dto properties and then update your user entity.
userService.save(user);
}
}
答案 1 :(得分:0)
Session session = sessionFactory.getCurrentSession();
String newuserId=newuser.getUserId();
session.clear();
User user=userService.readUser(newuserId);
Property1 prop1=user.getProperty1();
List<Property2> prop2=user.getProperty2();
session.clear();
newuser.setProp1(prop1);
newuser.setProp2(prop2);
newuser.save(); //You should go through services and abstraction layers before saving aka it should be in the DAO implementation layer.
您的问题需要改进,但请尝试这个答案。 您基本上将缺少的属性保存在某些变量中,然后将它们附加到前端User对象。 基于HQL输出,似乎这种方式获取用户并向其添加其他属性。