✅ RedirectAttributes
Spring MVC
에서 리다이렉트(redirect) 시 데이터를 안전하게 전달하기 위해 사용하는 인터페이스
->기존의 Model이나 Request 객체에 데이터를 담고, 리다이렉트 발생하면 새로운 요청으로 인해
데이터가 소멸되는 문제점이 있음
RedirectAttributes
를 사용하면 URL 인코딩 + 쿼리 파라미터까지 처리해줌
@PostMapping("/add")
public String addItemV6(Item item, RedirectAttributes redirectAttributes){ // ModelAttribute 어노테이션 자체를 생략 가능
Item saveItem = itemRepository.save(item);
redirectAttributes.addAttribute("itemId",saveItem.getId()); // 여기서 저장한 itemId가 주소값 뒤에 {itemId}로 들어감
redirectAttributes.addAttribute("status",true);
return "redirect:/basic/items/{itemId}";
}
{itemId}
?status=true
return 화면
방식 : 서버 내부에서 직접 뷰를 찾아 렌더링 + 브라우저의 URL이 변경되지 않음
redirect:url주소
방식 : 클라이언트에게 새로운 URL로 재요청하도록 지시 + 브라우저의 URL이 새로운 주소로 변경
redirect
는 주로 POST-Redirect-GET 패턴에서 사용되어 폼 재제출 문제를 방지하고, 새로고침 시 중복 처리를 막는 데 유용
✅ 데이터 전달 방식
addAttribute(key, value)
: URL 쿼리 파라미터로 전달 (주소창에 노출)addFlashAttribute(key, value)
: 세션에 임시 저장하여, 다음 요청에서만 사용 후 자동 삭제됨addFlashAttribute
경우 주소창에 노출되지 않으며, 일회성으로 사용되어 보안 및 편의성에 유용하다
주로 메시지 등, 일회성 데이터를 전달할 때 유용하다
주소창은 어떻게 노출되느냐?
redirectAttributes.addAttribute("orderNumber", "1010233");
return "redirect:/success";
/success?orderNumber=10102331
처럼 URL에 노출된다
✅ 뷰 템플릿 메시지 추가
<h2 th:if="${param.status}" th:text="'저장완료'"></h2>
${param.status}
: 타임리프에서 쿼리 파라미터를 편리하게 조회하는 기능