我有一个session属性:user,我有一个URL,既要由登录用户查看,又要由未以用户身份登录的用户公开查看.
所以我要做的是:
@Controller("myController")
@SessionAttributes({"user"})
public class MyController {
@RequestMapping(value = "/MyPage/{id}",method = RequestMethod.GET)
public ModelAndView getPage(@PathVariable Integer id) {
return modelandview1;
}
@RequestMapping(value = "/MyPage/{id}",method = RequestMethod.GET)
public ModelAndView getPage(@PathVariable Integer id,@modelattribute User user){
return modelandview2;
}
但是,我感到它无法正常工作.建议非常欢迎.
最佳答案
我认为@SessionAttributes不是正确的情况.此批注通常用于保留表单支持对象的原始实例,以避免通过隐藏的表单字段传递其状态的无关部分.
您的sceanrio完全不同,因此最好显式使用HttpSession:
@RequestMapping(value = "/MyPage/{id}",HttpSession session) {
User user = (User) session.getAttribute(...);
if (user != null) {
...
} else {
...
}
}
还要注意@modelattribute是数据绑定的主体-用户可以通过传递请求参数来更改其字段.在这种情况下,您绝对不想要它.