개발여행의 블로그
[오류, 에러] - @PostMapping org.springframework.web.servlet.PageNotFound - Request method 'POST' not supported 본문
[오류, 에러] - @PostMapping org.springframework.web.servlet.PageNotFound - Request method 'POST' not supported
개발 여행 2020. 6. 13. 23:55
간단하게 Spring Framework를 사용해 비동기 게시판을 작성하던 중 에러 발생하여 아래와 같은 메시지가 console에 기록되었다.
@PostMapping org.springframework.web.servlet.PageNotFound - Request method 'POST' not supported
검색을 통해 위의 에러 메시지를 확인해보았는데,
@PostMapping annotation이 빠졌을 경우, 통신을 할 때 주고받는 방식이 맞지 않아서 (즉, 보낼 때는 POST로 전송하였지만 GET 방식으로 받게끔 설정되어있을 경우) 위와 같은 에러가 발생하는 경우가 많았다.
하지만 모든 경우들을 다 체크한 결과, 모두 잘 연결되어있고 코드상 이상한 점이 전혀 없었다. 그렇게 열심히 삽질을 한 후(?) 문득 가장 기본적인 부분을 놓치고 있었다는 것을 발견함과 동시에 깨달을 수 있었다.
jsp페이지에서 <button> 태그를 만들어 버튼을 누를 때 동작을 처리하여 서버와 연결하였는데 button 태그에 type을 지정해주지 않아 버튼만 누르면 무조건 controller로 넘어가고 있는 것이었다..!
( 기억하기론 button의 type을 지정해주지 않으면 기본 type은 submit이 되기 때문에 주의해야한다. )
물론 form 태그에 action값을 설정해주고, 그 이외의 설정 등도 제대로 되어있었다면 에러는 나지 않았을 것이다. 하지만 비동기로 통신하는 게시판을 구현 중에 있었기에 action값을 설정해두지 않고 ajax에서 mapping을 해주었기 때문에 @PostMapping org.springframework.web.servlet.PageNotFound - Request method 'POST' not supported 이와 같은 에러가 발생하였다.
위와 같은 오류 메시지가 있다면 확인해야할 사항 2 가지
① jsp 페이지에서 <button> 태그에 type="button" ( <button type="button">~</button> )을 설정해주지 않을 경우, 버튼을 누르게 되면 바로 controller로 submit 된다. 단순히 submit 하는 것이 아닌 다른 event와 logic이 있다면 에러가 발생할 수 있다.
② @RequestMapping annotation을 사용할 경우, view와 controller의 전송 방식이 맞지 않을 때 위와 같은 에러가 발생할 수 있다.
따라서 POST 방식으로 호출하였다면 아래 코드와 같이,
@RequestMapping(value="/", method = {RequestMethod.GET})
GET 방식으로 호출하였다면 다음과 같이 설정해주어야한다.
@RequestMapping(value="/", method = {RequestMethod.POST})
혹은 두 가지 모두 사용한다면 동시에 넣어줄 수도 있다.
@RequestMapping(value="/", method = {RequestMethod.POST, RequestMethod.POST})