WEB/Spring MVC 1

스프링 MVC - 웹 페이지 만들기

Tony Lim 2022. 7. 8. 15:42

PRG (Post Redirect GET) 패턴

상품저장 Controller를 호출하고 바로 상품상세 페이지를 보내준다.

새로고침은 마지막 요청을 다시하는 셈이다. 상품 등록 페이지에서 새로 고침을 할때마다 저장이 된다. 

상품저장후 뷰 템플릿으로 이동하는것이 아니라 , 상품 상세 화면으로 리다이렉트를 호출해주면 된다.

    @PostMapping("/add")
    public String addItemV4(Item item) {
        itemRepository.save(item);
        return "basic/item";
    }
@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}";
}

이런식으로 redirect를 통해 사용자의 마지막 요청이 get 으로 남아있게 한다.

post add -> 응답 302 (redirect) -> browser에서 redirect에 명시된 url 로 get요청을 다시 날림

RedirectAttributes 를 통해 URL 인코딩과 원하는 attribute를 추가 할 수 있다. 

위의 예시에서는 itemId는 url로 가고 남는 status는 get 요청시 query param으로 날라가게 된다. (~~~?status=true)