Spring MVC 핸들러 메소드 @SessionAttributes
Spring Web MVC
백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글
@SessionAttributes
@SessionAttributes는 모델 정보를 HTTP 세션에 저장해주는 애노테이션이다.
가령 다음과 같이 사용할 수 있다.
@Controller
@SessionAttributes("event")
public class SampleController {
@GetMapping("/events")
@ResponseBody
public Event getEvent(Model model) {
Event newEvent = new Event();
newEvent.setLimit(50);
model.addAttribute("event",newEvent);
return event;
}
}
HttpSession을 메소드 Argument로 직접 사용할 수 있지만 @SessionAttributes 애노테이션에 설정한 이름에 해당하는 모델 정보를 자동으로 세션에 넣어준다.
왜 세션에 모델을 넣는가?
어떤 상황에 세션에 모델을 저장해놓을까?
이 기능을 왜 쓰는지 알아보자.
여러가지 이유가 있겠지만, 가령 예를 들어보자.
첫 번째 페이지에서 이름을 입력받고, 두 번째 페이지에서 닉네임을 입력받고, 세 번째 페이지에서 나이를 입력받는 웹사이트를 상상해보라.
이 때 두 번째 페이지에서는 첫 번째 페이지에 입력한 이름을 표시해주고, 세 번째 페이지에서는 첫 번째, 두 번째 페이지에서 입력한 이름과 닉네임을 표시하고 싶은 경우가 있다고 하자.
이 경우 세션에 모델을 저장해놓으면 꺼내서 재활용 할 수 있기 때문에 편리할 수 있다.
@SessionAttributes는 Method Argument가 아니잖아?
그렇다. 그래서 @SessionAttributes와 같이 사용할 수 있는 Method Argument로 SessionStatus가 존재한다.
@Controller
@SessionAttributes("event")
public class SampleController {
@GetMapping("/events")
@ResponseBody
public Event getEvent(Model model, SessionStatus sessionStatus) {
Event newEvent = new Event();
newEvent.setLimit(50);
model.addAttribute("event",newEvent);
sessionStatus.setComplete();
return event;
}
}
sessionStatus.setComplete()는 세션이 끝나는 시점의 핸들러에서 호출함으로써 세션 처리 완료를 알려주고 세션을 비울 때 사용한다.
Reference
인프런 백기선님의 스프링 Web MVC