본문 바로가기

스프링/스프링 MVC

핸들러 메서드: RedirectAttributes, FlashAttributes

Redirect URI 매개변수

기존 스프링 Web MVC에서는 model에 기본 primitive type 데이터를 넣고 redirect 하게 되면 URI 쿼리 매개변수에 추가된다. 하지만 스프링 부트는 기본 설정이 비활성화되어 있다.

application.properties에 위와 같이 ignore-default-model-on-redirect를 false로 두면 URI 쿼리 매개변수에 추가가 된다.

 

​이렇게 redirect시 모델에 들어간 primitive type의 데이터들이 URI 매개변수에 추가된 것을 알 수 있다.

하지만 이 설정을 켜면 모든 경우에 적용이 되기 때문에 특정 값들만 URI 매개변수에 추가하고 싶으면 RedirectAttribute를 사용하면 된다.

 


RedirectAttributes

1. addAttribute

이렇게 Model이 아닌 RedirectAttributes를 사용하면 아래와 같이 URI 쿼리 매개변수에 추가된 것을 확인할 수 있다.

 

 

URI쿼리 매개변수에 추가된 값을 ModelaAttribute를 통해 복합 객체로 받을 수 있다.

 

혹은 이런 식으로 RequestParam을 이용하여 단순 타입으로도 받아 사용이 가능하다. 하지만 addAttribute는 단일 타입만 넣을 수 있다. 복합 객체를 넣기 위해서는 addFlashAttribute를 사용하면 된다.

2. addFlashAttribute

addFlashAttribute를 사용하면 addAttribute와 다르게 객체도 저장이 가능하며 URI에 노출되지 않는다.

이렇게 추가된 값은 세션에 저장되며 리다이렉트 요청을 처리하면 그 값은 소멸된다.

RedicetAttribute에서 addFlashAttribute에 원하는 값을 넣어주면 된다. 그리고 @ModelAttribute로 그 값을 받을 수 있다.

 

addFlashAttribute에 넣은 값은 model에 들어있기 때문에 ModelAttribute를 쓰지 않아도 model을 통해 값을 얻어올 수 있다. 위에도 적혀있듯이 addFlashAttribute에 들어간 값은 리다이렉트 요청 후 값이 소멸되기 때문에 다른 요청에서는 사용할 수 없다.


https://www.inflearn.com/course/%EC%9B%B9-mvc/#