RedirectAttributes
"redirect:/basic/items/" + item.getId() redirect에서 +item.getId() 처럼 URL에 변수를 더해서 사용하는 것은 URL 인코딩이 안되기 때문에 위험하다. => RedirectAttributes 를 사용해서 해결할 수 있다!
상품 저장시, 고객 입장에서 저장이 잘 된 것인지 안 된 것인지 확신이 들지 않는다. 그래서 저장이 잘 되었으면 상품 상세 화면에 "저장되었습니다"라는 메시지를 보여달라는 요구사항이 왔다. 간단하게 해결해보자.
@PostMapping("/add") 수정 파라미터로 RedirectAttributes를 추가로 받는다. 리다이렉트할 때 status=true를 추가한다. 실행해보면 다음과 같은 리다이렉트 결과가 나온다. http://localhost:8080/basic/items/3?status=true
RedirectAttributes RedirectAttributes 를 사용하면 URL 인코딩도 해주고, pathVarible , 쿼리 파라미터까지 처리해준다.
pathVariable 바인딩 : {itemId} 변수처럼 사용하고, 치환할 수 있다!
치환할 데이터가 없다면 쿼리 파라미터로 처리 : ?status=true
뷰 템플릿 메시지 추가 상품 등록 후 리다이렉트되는 상품 상세 페이지(item.html)에서만 저장완료 메세지가 뜬다. 왜냐하면 상품 등록시에만 RedirectAttributes로 status=true를 전송하기 때문에 상품 등록 후 리다이렉트된 페이지에서 status가 타임리프 if문을 만족하여 저장 완료 메시지가 뜨고, GET 방식의 단순 상품 상세 페이지 접속 시에는 status가 없기 때문에 안 뜬다!
타임리프 문법
⭐️th:if : 해당 조건이 참이면 실행 ⭐️${param.status} : 타임리프에서 쿼리 파라미터를 편리하게 조회하는 기능
Last updated