java – Spring MVC Hibernate:来自浏览器的部分模型更新
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring MVC Hibernate:来自浏览器的部分模型更新,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1592字,纯文字阅读大概需要3分钟。
内容图文
![java – Spring MVC Hibernate:来自浏览器的部分模型更新](/upload/InfoBanner/zyjiaocheng/824/30d4049517d042f7aa6c55f3829e27bb.jpg)
当只显示Spring MVC模型bean的一部分时,有没有办法只在模型中更新从浏览器返回的内容?
假设我们有一个User类(当然只有这个例子中的公共属性):
public class User {
public String firstName;
public String lastName;
public String email;
public Date subscriptionExpiration;
}
现在,我将前三个属性显示为JSP中的输入字段,并希望相应地更新数据库中的对象.只应更新这3个参数,而不是第4个参数.实现这一目标的一种方法是
@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中错过了一个不错的功能,还是有其他方法可以在概念上解决这个问题?任何提示都非常感谢!
解决方法:
请参阅this question以了解如何使用@InitBinder来允许/阻止某些模型字段被Spring绑定以请求参数.这样可以确保通过注入请求参数来确保无法修改subscriptionExpiration.
有关如何在方法和方法参数上使用@ModelAttribute注释以从数据库加载用户并在调用@RequestMapping方法之前将其添加到模型,并在@RequestMapping中使用请求参数填充此用户,请参阅the documentation方法被调用.这允许从数据库中获取用户并让Spring使用来自请求的ne值填充它.您所要做的就是验证用户的新状态并将其保存到数据库中.
内容总结
以上是互联网集市为您收集整理的java – Spring MVC Hibernate:来自浏览器的部分模型更新全部内容,希望文章能够帮你解决java – Spring MVC Hibernate:来自浏览器的部分模型更新所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。