RedirectAttribute
- Spring MVC에서 리다이렉트할 때 데이터를 함께 전달할 수 있도록 도와주는 객체이다.
- 즉, 리다이렉트하면서 데이터를 유지하고 싶을 때 사용한다.
- URL 인코딩과 pathVariable, 쿼리 파라미터까지 처리해준다.
- 보통 redirect:/url을 하면 새로운 요청이 발생하기 때문에 기존 요청의 데이터가 사라진다.
- RedirectAttributes를 사용하면 일회성으로 데이터를 전달할 수 있다.
사용법
@PostMapping("/save")
public String saveItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes) {
Item savedItem = itemRepository.save(item);
redirectAttributes.addAttribute("itemId", savedItem.getId());
redirectAttributes.addFlashAttribute("message", "아이템이 성공적으로 저장되었습니다!");
return "redirect:/basic/items/{itemId}";
}
- redirectAttributes.addAttribute("itemId", savedItem.getId());
- URL의 경로변수{} 에 들어갈 값을 추가한다.
- redirectAttributes.addFlashAttribute("message", "아이템이 성공적으로 저장되었습니다!");
- 일회성 데이터를 전달한다. (새로운 요청이 끝날 때까지 유지됨)
- return "redirect:/basic/items/{itemId}";
- {itemId}에 자동으로 savedItem.getId() 값이 들어감.
addAttribute() vs addFlashAttribute()
addAttribute()
- 사용방법
- addAttribute("key", value)
- 설명
- 유지 범위
addFlashAttribute()
- 사용방법
- addFlashAttribute("key", value)
- 리다이렉트된 컨트롤러에서 값을 받아서 사용할 수 있다.
@GetMapping("/basic/items/{itemId}")
public String itemDetail(@PathVariable Long itemId, Model model, @ModelAttribute("message") String message) {
model.addAttribute("item", itemRepository.findById(itemId));
return "itemDetail";
}
- @ModelAttribute("message") String message 를 통해서 사용한다.
- 설명
- 유지 범위
🧹 정리
- 쿼리 파라미터나 URL 경로 변수로 데이터를 넘기려면 addAttribute()사용
- 새로운 요청에서도 유지하고 싶다면 addFlashAttribute()사용
- FlashAttribute는 한번 사용하면 자동으로 사라짐