Spring MVC如何禁止数据绑定到ModelAttribute?

2024-01-04

我有一个简单的@Controller用户登录后呈现页面的类:

@Controller
@SessionAttributes("user")
public class DashBoardController {

    @RequestMapping(value="/user/dashBoard", method=RequestMethod.GET)
    public String showDashBoardPage(@ModelAttribute("user") User user, Model model) {
        //do some work here....
        return "dashBoard";
    }

}

如你所见,user属性已存在于会话中并通过使用@ModelAttribute注释我只想从那里提取它,没有别的。但是如果你向请求添加任何参数,那么spring会尝试将此参数绑定到现有的用户对象,这不是我想要的,如何禁止这种行为?

更具体地说,这是 User 类:

public class User {

   private String name;
   private String password;
   private Language language;

   //public getters and setters here...
} 

如果我想更改我的语言dashBoard页面,我请求此页面添加?language=en参数,在这种情况下,Spring 尝试更改用户模型属性的语言字段,这当然会失败并出现类型不匹配异常。 当然,我可以通过将参数名称更改为与任何都不匹配的名称来四处走动User领域,但这似乎是一个脆弱的解决方案。 有什么方法可以控制这种数据绑定行为吗? 我用的是Spring 4.1.3


有一个属性是@ModelAttribute called binding您可以将其设置为 false 以禁用请求参数的绑定。用法:@ModelAttribute(binding=false)在方法参数之前。

参考:click http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-method-args

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC如何禁止数据绑定到ModelAttribute? 的相关文章

随机推荐