본문 바로가기
JAVA & Spring/Error

[Spring][Postman] 405 Method Not Allowed 오류 해결 방법

by 알기 쉬운 코딩 사전 2024. 7. 12.
반응형

🚨 Postman send 버튼 클릭시 발생한 에러 메시지

{
    "timestamp": "2024-07-11T17:14:17.577+00:00",
    "status": 405,
    "error": "Method Not Allowed",
    "path": "/test"
}
postman image

❓에러 발생 이유

클라이언트에서 요청한 HTTP Method가 서버에 존재하지 않아 나타나는 오류 메시지입니다.
해당 오류 메시지는 Spring(Servlet, Tomcat)이 출력하는 에러 메시지입니다.

예를 들어 서버(Spring, Java)에서는 HTTP Method를 Put으로 요청받기를 설정하였지만, 클라이언트에서는 HTTP Method를 Post로 요청할 경우에 나타나는 에러입니다.

보통은 HTTP Method 설정을 잘못 설정하여 나타나는 에러입니다.
혹은 Spring에 해당 URL을 처리하는 Mapping이 잘못 구현되거나 구현되지 않은 상태입니다.

 

✅ 해결 방법

Client의 HTTP Method를 올바르게 설정 시켜 줍니다.
Postman method img

🌟 정상 응답 결과

postman result img

 
Spring의 Controller 예시 코드

@PutMapping("/hello")
public TestUpdateUserResponse updateUser(@RequestBody TestUpdateUserRequest request) {
    return new TestUpdateUserResponse(request);
}

 

참고: HTTP Method를 통일시켜 주면 되기 때문에 아래와 같이 Server(Spring)을 수정하여도 됩니다.
하지만 HTTP Method를 설정하는 부분은 API 설계의 가장 기본이 되는 부분이므로
프로젝트 기획 단계에서 알맞은 URL과 HTTP Method를 미리 결정해야 합니다.
// @PutMapping("/hello") @PutMapping -> @PostMapping로 변경
@PostMapping("/hello")
public TestUpdateUserResponse updateUser(@RequestBody TestUpdateUserRequest request) {
    return new TestUpdateUserResponse(request);
}

 
전체 코드
TestController.java

@RestController
public class TestController {
    @PutMapping("/hello")
    public TestUpdateUserResponse updateUser(@RequestBody TestUpdateUserRequest request) {
        return new TestUpdateUserResponse(request);
    }

    @Data
    static class TestUpdateUserRequest {
        private String username;
        private int age;
    }

    @Data
    static class TestUpdateUserResponse {
        private String username;
        private int age;

        public TestUpdateUserResponse(TestUpdateUserRequest request) {
            this.username = request.getUsername();
            this.age = request.getAge();
        }
    }
}
반응형

댓글