티스토리 뷰

Spring

Spring - MVC RedirectAttributes

엔꾸꾸 2019. 7. 29. 21:13

Spring Handler Method - @RedirectAttributes

  • Redirect시 Model에 존재하는 Primitive Type데이터는 자동으로 URI QueryParameter로 추가된다.

    • 스프링부트 에서는 이 기능이 기본적으로 비활성화 되어있다.
    • RequestMappingHandlerAdapter 설정에 setIgnoreDefaultModelOnRedirect = true 로 되어있음.
    • Ignore-default-model-on-redirect 옵션을 사용해서 활성화 할 수 있음.
    • Model에 존재하는 모든 Primitive Type DATA들을 추가하지않고, 원하는 데이터만 명시적으로 추가하고 싶다면 RedirectAttributes를 사용한다.
  • RedirectAttributes

    • Spring 3.1 이상 제공
    • Redirect시 원하는 값들을 전달하고 싶다면 RedirectAttributes를 사용해서 추가할 수 있다.
    • addAttribute로 담긴 primitive type data는 QueryParameter로 전달이된다.
    • URI 로 전달되기 때문에 문자열로 변환이 가능해야한다.

RedirectAttributes

 

주의점

  • RedirectAttributes를 사용할때, @SessionAttributes와 함께 사용한다면 주의해서 개발을 해야한다.

    1. RedirectAttributes 사용시 @SessionAttributes에 지정해둔 name값과 동일한 상태
    1. sessionStatus.setComplete() 를 활용하여 세션을 비워진 상태
    1. @ModelAttribute 로 복합 객체를 받아올때 @SessionAttributes에 설정해둔 name값에 해당하는 객체를 session에서 먼저 찾으려고 하고, 없다면 예외가 발생하게된다.

 

 

  • Flash Attributes

    • 주로 리다이렉트시 데이터를 전달할때 사용된다.
    • DATA가 URI에 노출되지않는다.
    • 임의의 객체를 저장할 수 있다.
    • HTTP Session을 활용한다.
    • Redirect전 DATA를 HTTP Session에 저장하고, Redirect후 즉시 제거한다.
    • Model을 선언해두었다면 FlahsAttributes로 넘긴 데이터가 model에 담겨있기때문에, Model만 선언해두어도 model에서 꺼내어 사용할 수 있다.
    • @ModelAttribute나 @RequestParam등으로 받으려고 선언하지않아도 된다.

정리

  • Spring MVC는 Redirect시 Model에 존재하는 모든 Primitive Type DATA를 URI QueryParameter로 추가한다.
  • Spring Boot는 기본적으로 이 설정이 OFF
    • Ignore-default-model-on-redirect 옵션으로 ON/OFF 가능
  • Redirect시 원한는 값들만 명시적으로 추가하고 싶다면 RedirectAttributes를 사용할것.
    • addAttribute로 담긴 Primitive Type DATA는 URI QueryParameter로 전달이된다.
    • URI 로 전달되기 때문에, 문자열로 변환이 가능해야한다.
  • @SessionAttributes, @ModelAttribute와 함께 사용시 name값에 각별히 주의할것.
  • Redirect시 URI 에 파라미터로 노출되고싶지않은 데이터가 있다면 FlashAttributes를 사용할것.
    • DATA가 URI에 노출되지않으며, Object도 전달이 가능하다.
    • Session에 저장되었다가 Redirect후 즉시 제거된다.
    • FlahsAttributes로 전달한 데이터는 Model에 담기기 때문에 Model만 선언해두었디만, @ModelAttribute나 @RequestParam으로 받지 않아도 된다.

'Spring' 카테고리의 다른 글

Spring - MVC ResourceLoader  (0) 2019.07.30
Spring - MVC MultipartFile  (0) 2019.07.29
Spring - MVC @SessionAttribute  (0) 2019.07.28
Spring - MVC @SessionAttributes  (0) 2019.07.28
Spring - MVC @Valid_@Validated  (0) 2019.07.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함