복붙노트

[SPRING] 봄 @SessionAttribute 어떻게 동일한 컨트롤러에서 세션 개체를 검색합니다

SPRING

봄 @SessionAttribute 어떻게 동일한 컨트롤러에서 세션 개체를 검색합니다

나는 봄 3.2.0 MVC를 사용하고 있습니다. 그 나는 세션에 하나 개의 객체를 저장해야합니다. 현재 내가 설정의 HttpSession을 이용하고 저장하고 값을 검색 할 속성을 얻을.

그것은 단지 문자열 객체를 돌려줍니다. 나는 그것을 세션에서 개체를 설정하려고 할 때 @SessionAttribute을 사용하고 싶지만 내가 세션 객체를 검색 할 수 없습니다

 @RequestMapping(value = "/sample-login", method = RequestMethod.POST)
    public String getLoginClient(HttpServletRequest request,ModelMap modelMap) {
        String userName = request.getParameter("userName");
        String password = request.getParameter("password");
        User user = sample.createClient(userName, password);
        modelMap.addAttribute("userObject", user);
        return "user";
    }


     @RequestMapping(value = "/user-byName", method = RequestMethod.GET)
    public
    @ResponseBody
    String getUserByName(HttpServletRequest request,@ModelAttribute User user) {

        String fas= user.toString();
        return fas;
    }

두 가지 방법 모두 동일한 컨트롤러에 있습니다. 어떻게 개체를 검색하려면이 옵션을 사용해야합니까?

해결법

  1. ==============================

    1.@SessionAttributes 어노테이션을 클래스 레벨에 사용된다 :

    @SessionAttributes 어노테이션을 클래스 레벨에 사용된다 :

    그래서 당신은이 예제에서처럼 @ModelAttribute 주석과 함께 사용할 수 있습니다 :

    @Controller
    @RequestMapping("/counter")
    @SessionAttributes("mycounter")
    public class CounterController {
    
      // Checks if there's a model attribute 'mycounter', if not create a new one.
      // Since 'mycounter' is labelled as session attribute it will be persisted to
      // HttpSession
      @RequestMapping(method = GET)
      public String get(Model model) {
        if(!model.containsAttribute("mycounter")) {
          model.addAttribute("mycounter", new MyCounter(0));
        }
        return "counter";
      }
    
      // Obtain 'mycounter' object for this user's session and increment it
      @RequestMapping(method = POST)
      public String post(@ModelAttribute("mycounter") MyCounter myCounter) {
        myCounter.increment();
        return "redirect:/counter";
      }
    }
    

    또한 일반적인 noobie의 함정을 잊지 말라 : 당신이 당신의 세션이 직렬화 객체 있는지 확인합니다.

  2. from https://stackoverflow.com/questions/17722641/spring-sessionattribute-how-to-retrieve-the-session-object-in-same-controller by cc-by-sa and MIT license