【发布时间】:2012-12-10 00:00:45
【问题描述】:
当只显示 Spring MVC 模型 bean 的一部分时,有没有办法只在模型中更新从浏览器返回的内容?
假设我们有一个 User 类(当然,在这个例子中只有公共属性):
public class User {
public String firstName;
public String lastName;
public String email;
public Date subscriptionExpiration;
}
现在我将前三个属性显示为 JSP 中的输入字段,并希望相应地更新数据库中的对象。应该只更新这 3 个参数,而不是第四个。实现此目的的一种方法是
@RequestMapping("/user/{userId}", method=RequestMethod.POST)
public String saveChanges(@PathVariable userId, User user, Model model) {
User oldUser = User.loadFromDB(userId);
oldUser.firstName = user.firstName;
oldUser.lastName = user.lastName;
oldUser.email = user.email;
oldUser.saveToDB();
model.addAttribute("user", oldUser);
}
但这意味着硬编码所有可能改变的属性,我不太喜欢。
有没有办法根据允许用户更改的内容来确定要更新哪些字段?该机制应该比仅仅假设请求参数中的所有内容都可以更改更智能,否则任何精明的用户都可以手动将其他字段注入请求中。
在我看来,使用 @Entity(dynamicUpdate=true) 也不能解决问题,因为我没有将整个 User 对象返回到请求中,这样做会带来许多安全漏洞。
我错过了 Spring 中的一个不错的功能,还是有任何其他方法可以从概念上解决这个问题?非常感谢任何提示!
【问题讨论】:
标签: java spring hibernate spring-mvc