[Spring] PRG Post/Redirect/Get

Manx·2022년 4월 29일
0

spring

목록 보기
14/24

스프링 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}";
}

URL에 해당되지 않은 redirectAttributes는 다음과 같이 쿼리로 들어간다.
http://localhost:8080/basic/items/3?status=true

Thymeleaf에서 ${param.status} 로 접근 가능

0개의 댓글