RedirectAttributes

WAS·2024년 2월 13일
0

✅ 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}";
    }
  • pathVariable 바인딩 : {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} : 타임리프에서 쿼리 파라미터를 편리하게 조회하는 기능
    -> 원래는 컨트롤러에서 모델을 직접 담고 값을 꺼내야하지만
    쿼리 파라미터는 자주 사용하기 때문에 타임리프에서 지원해줌
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글