java-使用相同的请求映射重载spring控制器方法

前端之家收集整理的这篇文章主要介绍了java-使用相同的请求映射重载spring控制器方法 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个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是数据绑定的主体-用户可以通过传递请求参数来更改其字段.在这种情况下,您绝对不想要它.

猜你在找的Spring相关文章