항해99 7기 13일차 TIL[org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported]
2022년 5월 22일 항해 13일차
어제부터 주특기 입문주차가 시작되었고 스프링 강의에만 몰두한 날이었다.
수업세부내용은 저작권이 있기때문에 올리기가 망설여지지만, CRUD에 대해서 배웠다.
(CRUD란? 정보관리의 기본 기능으로 생성 (Create) → 조회 (Read) → 변경 (Update) → 삭제 (Delete)를 말한다.)
domain, controller, service 패키지에 클래스들을 담고, index.html 까지 작성했다.
그 후 설레는 마음으로 실행을 클릭했지만 에러가 발생했다.
그 에러는 바로!
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported...
진짜 얼굴이 벌개질 정도로 구글링만 했던 것 같다.
application.properties에
spring.mvc.hiddenmethod.filter.enabled=true를 입력해봐야 한다는 등...
여러가지 해결법을 찾아봤지만 에러에 대한 해결책을 찾지 못했다.
두시간 동안 구글링... 건진건 없었고 결국 코드를 하나하나씩 뜯어보기로 했다.
PUT이 지원되지 않는다는 글이 계속해서 나오는거보니 PUT부분에서 에러가 난게 확실해보였고
function submitEdit(id) {
let username = $(`#${id}-username`).text().trim();
let contents = $(`#${id}-textarea`).val().trim();
if (isValidContents(contents) == false) {
return;
}
let data = {'username': username, 'contents': contents};
$.ajax({
type: "PUT",
url: `/api/memos/${id}`,
data: JSON.stringify(data),
contentType: 'application/json',
success: function (response) {
alert('메시지 변경에 성공하였습니다.');
window.location.reload();
}
})
}
클라이언트 부분 index.html에 문제도 없었다. username, contents를 받아오고 넣어주는 것도 말이다!
이제 controller...
@PutMapping("/api/memo/{id}")
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
memoService.update(id, requestDto);
return id;
}
난 controller에서 실수를 저지르고 말았다.
클라이언트에서 url을 `/api/memos/${id}`로 설정해두었지만,
컨트롤러에서는 "/api/memo/{id}"로 설정 되어있던 것!
momos와 momo... s라는 알파벳 하나만으로 이 에러가 발생한 것이었다.
이 에러로 두시간 동안 구글링을 했고, 코드를 하나하나 뜯어보느라 눈도 아팠다.
근데 이 에러가 알파벳 하나로 나타난 오류였다니...ㅋㅋㅋㅋ
컴퓨터의 문제라서 포멧을 해야하나? 라는 고민까지 했었는데 알파벳 하나때문에 생긴 오류였다고?ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
무튼 이런 경험도 해본다.
이 경험도 나의 실수를 줄여주는 좋은 양분이 되길.