1. 개요
이 빠른 기사는 개발자가 Spring MVC를 사용하여 특정 HTTP 동사에 대한 API를 노출하는 동안 직면하는 일반적인 오류 인 'Request Method not Supported – 405'에 초점을 맞추고 있습니다.
당연히이 오류의 일반적인 원인에 대해서도 설명합니다.
2. 요청 방법 기본 사항
일반적인 문제로 이동하기 전에 Spring MVC에 대해 배우기 시작했다면 여기에 좋은 소개 기사 가 있습니다.
또한 기본 사항을 매우 빠르게 살펴보고 Spring에서 지원하는 요청 메서드와 여기에서 관심있는 몇 가지 공통 클래스를 이해해 보겠습니다.
매우 단순화 된 방식으로 MVC HTTP 메서드는 요청이 서버에서 트리거 할 수있는 기본 작업입니다. 예를 들어, 일부 메소드 는 서버에서 데이터를 가져오고 , 일부 는 데이터를 서버에 제출 하고, 일부 는 데이터를 삭제할 수 있습니다 .
@RequestMapping 어노테이션은 요청에 대한 지원 방법을 지정합니다.
Spring은 enum RequestMethod 에서 지원되는 모든 요청 메소드를 선언합니다 . 표준 GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE 동사를 지정합니다.
Spring DispatcherServlet은 제외하고 기본적으로 모두 지원 옵션 및 TRACE ; @RequestMapping 은 RequestMethod 열거 형 을 사용하여 지원되는 메서드를 지정합니다.
3. 간단한 MVC 시나리오
이제 모든 HTTP 메서드를 매핑하는 코드 예제를 살펴 보겠습니다.
@RestController
@RequestMapping(value="/api")
public class RequestMethodController {
@Autowired
private EmployeeService service;
@RequestMapping(value = "/employees", produces = "application/json")
public List<Employee> findEmployees()
throws InvalidRequestException {
return service.getEmployeeList();
}
}
예제에서 findEmployee () 메서드 를 선언하는 방법을 확인하십시오 . 특정 요청 방법을 지정하지 않으므로이 URL은 모든 기본 방법을 지원합니다.
예를 들어 curl을 사용하여 지원되는 다른 방법을 사용하여 API를 요청할 수 있습니다.
$ curl --request POST http://localhost:8080/api/employees
[{"id":100,"name":"Steve Martin","contactNumber":"333-777-999"},
{"id":200,"name":"Adam Schawn","contactNumber":"444-111-777"}]
당연히 간단한 curl 명령, Postman, AJAX 등을 통해 여러 방법으로 요청을 보낼 수 있습니다 .
물론 요청이 올바르게 매핑되고 성공 하면 200 OK 응답 을받을 것으로 예상합니다 .
4. 문제 시나리오 – HTTP 405
하지만 여기서 논의하는 것은 물론 요청이 성공하지 못할 때의 시나리오입니다.
' 405 Method Not Allowed '는 Spring 요청으로 작업하는 동안 관찰되는 가장 일반적인 오류 중 하나입니다.
다음과 같이 Spring MVC에서 GET 요청을 구체적으로 정의하고 처리하면 어떻게되는지 살펴 보겠습니다.
@RequestMapping(
value = "/employees",
produces = "application/json",
method = RequestMethod.GET)
public List<Employee> findEmployees() {
...
}
// send the PUT request using CURL
$ curl --request PUT http://localhost:8080/api/employees
{"timestamp":1539720588712,"status":405,"error":"Method Not Allowed",
"exception":"org.springframework.web.HttpRequestMethodNotSupportedException",
"message":"Request method 'PUT' not supported","path":"/api/employees"}
5. 405 지원하지 않음 – 이유, 해결책
이 이전 시나리오에서 얻은 것은 405 상태 코드가 포함 된 HTTP 응답입니다. 이는 서버가 요청에서 보낸 메서드 / 동사를 지원하지 않음을 나타내는 클라이언트 오류입니다.
이름에서 알 수 있듯이이 오류의 원인은 지원되지 않는 메서드로 요청을 보내기 때문입니다.
예상 할 수 있듯이 기존 메서드 매핑에서 PUT에 대한 명시 적 매핑을 정의하여이 문제를 해결할 수 있습니다.
@RequestMapping(
value = "/employees",
produces = "application/json",
method = {RequestMethod.GET, RequestMethod.PUT}) ...
또는 새 메서드 / 매핑을 별도로 정의 할 수 있습니다.
@RequestMapping(value = "/employees",
produces = "application/json",
method=RequestMethod.PUT)
public List<Employee> postEmployees() ...
6. 결론
요청 방법 / 동사는 HTTP 통신에서 중요한 측면이며, 서버 측에서 정의한 작업의 정확한 의미와 우리가 보내는 정확한 요청에주의해야합니다.
항상 그렇듯이이 기사에 표시된 예제 는 GitHub에서 사용할 수 있습니다 .
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/spring-request-method-not-supported-405
'Java' 카테고리의 다른 글
서블릿 리디렉션과 전달 (0) | 2021.04.17 |
---|---|
Spring에서 ThymeLeaf 및 FreeMarker 이메일 템플릿 사용 (0) | 2021.04.17 |
Spring @RequestParam 어노테이션 (0) | 2021.04.17 |
Spring @RequestParam 대 @PathVariable 어노테이션 (0) | 2021.04.17 |
Spring Boot로 Hikari 연결 풀 구성 (0) | 2021.04.16 |