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

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

我有一个session属性:user,我有一个URL,既要由登录用户查看,又要由未以用户身份登录用户公开查看.

所以我要做的是:

  1. @Controller("myController")
  2. @SessionAttributes({"user"})
  3. public class MyController {
  4. @RequestMapping(value = "/MyPage/{id}",method = RequestMethod.GET)
  5. public ModelAndView getPage(@PathVariable Integer id) {
  6. return modelandview1;
  7. }
  8. @RequestMapping(value = "/MyPage/{id}",method = RequestMethod.GET)
  9. public ModelAndView getPage(@PathVariable Integer id,@modelattribute User user){
  10. return modelandview2;
  11. }

但是,我感到它无法正常工作.建议非常欢迎.

最佳答案
我认为@SessionAttributes不是正确的情况.此批注通常用于保留表单支持对象的原始实例,以避免通过隐藏的表单字段传递其状态的无关部分.

您的sceanrio完全不同,因此最好显式使用HttpSession:

  1. @RequestMapping(value = "/MyPage/{id}",HttpSession session) {
  2. User user = (User) session.getAttribute(...);
  3. if (user != null) {
  4. ...
  5. } else {
  6. ...
  7. }
  8. }

还要注意@modelattribute是数据绑定的主体-用户可以通过传递请求参数来更改其字段.在这种情况下,您绝对不想要它.

猜你在找的Spring相关文章