我有一个用户登录的MVC spring应用程序,它存储了一个User @SessionAttribute,我将在后面引用它。在POST请求中更新Customer对象时,我希望会话用户信息添加到此对象。 我的问题是当我在客户POST中访问@ModelAttribute(“user”)用户对象时,spring已将请求参数绑定到其中,即User.name具有提交表单中Customer.name的值。
NB我有点黑客攻击,因为所有控制器都是我的AppController的子类,这是声明@SessionAttributes的地方。但如果它是一个单一的控制器,原则就是一样的。
我可以阻止spring绑定表单:客户名值为User.name吗?
(我怀疑webflow会是一个更合适的框架,但现在没有时间用这个重写)
答案 0 :(得分:1)
您可以使用@InitBinder
允许或禁止绑定模型属性的某些字段:
@InitBinder("user")
public void configureBindingOfUser(WebDataBinder binder) {
binder.setAllowedFields(); // No fields allowed
}
但是,我不认为使用@SessionAttributes
存储当前用户或其他类似对象是个好主意。 @SessionAttributes
最初设计用于维护GET
和POST
请求之间的表单支持对象的状态,而不是作为访问会话的通用方法。
或许最好使用session
- 作用域bean或自定义参数解析器来访问此类信息。