참고한 url: 링크
application.properties에 이하 코드 추가
spring.thymeleaf.mode=HTML5
참고한 url: 링크
application boot 파일의 @SpringBootApplication을 이하 코드로 수정
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
There was an unexpected error (type=Internal Server Error, status=500).
An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply: public java.lang.String community.web.PostReadController.deletePost(long,org.springframework.validation.Errors,org.springframework.web.bind.support.SessionStatus)
java.lang.IllegalStateException: An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply: public java.lang.String community.web.PostReadController.deletePost(long,org.springframework.validation.Errors,org.springframework.web.bind.support.SessionStatus)
오류에서는 Errors를 model attribute나 @RequestBody 뒤에 선언하라는데 코드를 몇 번이나 다시 읽고 세수를 하고 와서 다시 쳐다봐도 내 코드는 진작부터 리퀘스트 뒤에 에러를 선언해뒀다.
분명 @RequestParam 뒤에 Errors가 선언됐음에도 불구하고 자꾸 오류가 뜨니 일주일차 웹린이는 패닉에 빠져 구글링을 미친듯이 한 것이다...
결론은 터무니 없었다.
@RequestBody와 Errors 및 BindingResult는 같이 못 쓴다. Errors를 파라미터에서 치우니 깔끔하게 다음 오류가 떴다. 만족스럽다.
참고한 url: 링크
...
@PostMapping("/delete")
@ResponseBody
public String deletePost(@RequestParam long id, @Valid Errors errors, SessionStatus sessionStatus) {
if (errors.hasErrors()) {
return "read";
}
postRepo.delete(id);
sessionStatus.setComplete();
return "redirect:/home";
}
...
...
@PostMapping("/delete")
@ResponseBody
public String deletePost(@RequestParam long id, SessionStatus sessionStatus) {
if (errors.hasErrors()) {
return "read";
}
postRepo.delete(id);
sessionStatus.setComplete();
return "redirect:/home";
}
...
참고한 url: 링크
@ResponseBody가 붙어있으면 반환형 그대로 String으로 반환한다. @ResponseBody를 사용하는 것은, 반환된 String을 view의 이름으로 해석하지 말고 그대로 출력하라고 Spring에게 명령하는 것과 같다.