[SpringBoot] Request method 'DELETE' is not supported

bada·2024년 8월 22일

Trouble Shooting

목록 보기
4/10

문제 발생

Resolved[org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' is not supported] 라는 에러메시지가 떴다. 에러 페이지가 뜨는 것은 아니고 삭제 로직이 잘 구현되는 듯 하지만 잘 삭제가 되었는지 해당 페이지에 돌아가면 데이터가 그대로 남아있는 현상..


문제 원인

아래처럼 Delete 메서드를 실행할 경로 매핑을 해주지 않았던 것.

@DeleteMapping()
public ResponseEntity<ItemDeleteResponse> deleteItem(@PathVariable("id") long id) {
    itemDetailService.deleteItem(id);

    return ResponseEntity.ok()
            .build();
}

문제 해결

메서드와 매핑할 경로를 지정해 준다.

@DeleteMapping("/{id}")
public ResponseEntity<ItemDeleteResponse> deleteItem(@PathVariable("id") long id) {
    itemDetailService.deleteItem(id);

    return ResponseEntity.ok()
            .build();
}


삭제가 잘 완료되었다. 물론 에러가 나기 전에도 이 페이지까지는 떴지만 다시 해당 상세 페이지로 들어가면 데이터가 없는 모습을 볼 수 있었다.


사실 너무 어처구니없는 오류여서 허무했다. 나는 아직 프론트 쪽과 백 쪽에서 데이터 전달이 어떻게 이뤄지는지 흐름이 헷갈리는 상태에다가 잘 모르는 타임리프까지 적용해서 프로젝트를 진행 중이라 혹시 html에서 전달하는 방식이 잘못됐나? 폼으로 전달하는데 문법이 이상한가.. 싶어서 계속 앞부분에서만 오류를 찾느라 1시간이 넘게 소요된 에러였다. 🥲

덕분에 새로 알게 된 것은 있다. 바로 get, post만 있는 줄 알았던 form 방식에 delete, put도 가능하게 설정해주는 설정 방식이 있다는 것!

application.properties에 아래의 내용을 기입해주면 된다.

spring.mvc.hiddenmethod.filter.enabled=true

실제로 적용해봐도 당연히 적용이 안된다. url매핑이 안된 문제였으니.. 대신 조만간 내가 작성한 수정 기능을 form 방식으로 데이터를 전달해보는 리팩토링을 진행해봐야겠다.

profile
하루 세번 목 당기기

0개의 댓글