Spring

[Spring] RedirectAttributes

동그리담 2024. 5. 8. 17:19
@PostMapping("/add")
public String addItemV3(@ModelAttribute("item") Item item) {
    itemRepository.save(item);

    return "redirect:/basic/items/" + item.getId();
}

redirect에서 +item.getId() 처럼 URL에 변수를 더해서 사용하는 것은 URL 인코딩이 안되기 때문에 위험하다. 

이를 해결하기 위한 RedirectAttributes를 알아보도록 하자.

 

RedirectAttributes

사용자 요구사항 추가 : 저장 된 경우, 완료 메시지 보여주기

  1. 매개변수로 RedirectAttributes 를 넣어준다.
  2. .addAttribute메서드를 사용해서 "itemId"를 저장.
    • redirectAttributes.addAttribute("itemId", savedItem.getId());
  3. addAttribute메서드를 사용해서 "status"이름으로 boolean값 지정
    • redirectAttributes.addAttribute("status", true);

이렇게 하면

@PostMapping("/add")
public String addItemV6(Item item, RedirectAttributes redirectAttributes) {
        Item savedItem = itemRepository.save(item);
        redirectAttributes.addAttribute("itemId", savedItem.getId());
        redirectAttributes.addAttribute("status", true);
    return "redirect:/basic/items/{itemId}";
}

 

위와 같이  사용 가능하다!
여기서 사용안한 status 같은 경우 url에 쿼리 파라미터 ?status=true 와 같이 들어가게 된다.

<!--  -->
<h2 th:if="${param.status}" th:text="저장 완료!"></h2>

 

RedirectAttributes 를 사용하면 URL 인코딩도 해주고, pathVariable , 쿼리 파라미터까지 처리해준다

 

출처: https://tan-sog.tistory.com/90