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

2022-09-03 15:36:54

我有一个简单的类,在用户登录后呈现页面:@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";
    }

}

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

更具体地说,下面是 User 类:

public class User {

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

   //public getters and setters here...
} 

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


答案 1

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

参考:单击


答案 2

推荐