스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 By 김영한 강사님의 강의 내용입니다.
주문을 생성하는 URL에서 새로고침을 하면, 전에 보냈던 요청을 그대로 다시 보내 주문이 중복되는 현상이 발생한다.
이 문제를 해결하기 위해 POST, Redirect GET 을 사용해야 한다.
POST요청 후 GET 요청으로 Redirect 시켜주는 것!
/**
* PRG - Post/Redirect/Get
*/
@PostMapping("/add")
public String addItemV5(Item item) {
itemRepository.save(item);
return "redirect:/basic/items/" + item.getId();
}
그러나 이렇게 +item.getId()를 하게 되면 URL 인코딩이 안되기 때문에 좋지 않다.
이럴 경우에는 RedirectAttributes를 사용해야 한다.
/**
* RedirectAttributes
*/
@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}";
}
http://localhost:8080/basic/items/3?status=true
Thymeleaf에서 ${param.status} 로 접근 가능