컨트롤러에 @ModelAttribute
메소드가 지정된 상태에서 redirect를 수행하면 리다이렉트 주소 뒤에 모든 모델 어트리뷰트가 파라미터로 붙는 현상이 발생한다. 이 때 해결책은 Model 객체의 모든 내용을 삭제한 뒤에 리다이렉트하면 된다. java - How do I prevent Spring 3.0 MVC @ModelAttribute variables from appearing in URL? - Stack Overflow
// ModelMap 객체일 경우 model.clear(); // Model 객체일 경우 model.asMap().clear();
전역으로 Model 데이터의 파라미터화를 막으려면,
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
혹은 Java Config의 경우 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#setIgnoreDefaultModelOnRedirect
를 true
로 설정한다. 신규 애플리케이션은 이를 true
로 설정하는 것을 권한다.
Spring 3.1의 경우 RedirectAttributes를 사용하면 위와 같은 작업이 불필요하다.
@RequestMapping(value = "/accounts", method = RequestMethod.POST) public String handle(Account account, BindingResult result, RedirectAttributes redirectAttrs) { if (result.hasErrors()) { return "accounts/new"; } // Save account ... redirectAttrs.addAttribute("id", account.getId()).addFlashAttribute("message", "Account created!"); return "redirect:/accounts/{id}"; }
RedirectAttributes
를 사용하던 ignoreDefaultModelOnRedirect=true
이던, Request에 attribute로 넣은 값들은 자동으로 파라미터로 들어갔다. TODO 확인 필요.