[SPRING] Spring Boot 405 POST 메소드가 지원되지 않습니까?
SPRINGSpring Boot 405 POST 메소드가 지원되지 않습니까?
스프링 부트 MVC가 POST 메소드를 어떻게 지원하지 않을 수 있습니까? 엔티티 목록을 받아들이는 간단한 게시 메서드를 구현하려고합니다. 여기에 내 코드가 있습니다.
@RestController(value="/backoffice/tags")
public class TagsController {
@RequestMapping(value = "/add", method = RequestMethod.POST)
public void add(@RequestBody List<Tag> keywords) {
tagsService.add(keywords);
}
}
이 URL을 다음과 같이 누르십시오.
http://localhost:8090/backoffice/tags/add
요청 본문 :
[{"tagName":"qweqwe"},{"tagName":"zxczxczx"}]
나는 받는다 :
{
"timestamp": 1441800482010,
"status": 405,
"error": "Method Not Allowed",
"exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
"message": "Request method 'POST' not supported",
"path": "/backoffice/tags/add"
}
편집하다:
스프링 웹 요청 핸들러 디버깅
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.checkRequest(request);
protected final void checkRequest(HttpServletRequest request) throws ServletException {
String method = request.getMethod();
if(this.supportedMethods != null && !this.supportedMethods.contains(method)) {
throw new HttpRequestMethodNotSupportedException(method, StringUtils.toStringArray(this.supportedMethods));
} else if(this.requireSession && request.getSession(false) == null) {
throw new HttpSessionRequiredException("Pre-existing session required but none found");
}
}
supportedMethods의 두 가지 메소드는 {GET, HEAD}뿐입니다.
해결법
-
==============================
1.RestController 어노테이션 정의에 오류가 있습니다. 문서에 따르면 :
RestController 어노테이션 정의에 오류가 있습니다. 문서에 따르면 :
즉, 입력 한 값 ( "/ backoffice / tags")이 사용 가능한 경로가 아닌 컨트롤러의 이름입니다.
@RequestMapping ( "/ backoffice / tags")을 컨트롤러 클래스에 추가하고 @RestController 주석에서 값을 제거하십시오.
편집하다: 주석이 작동하지 않는다는 완전한 예제가 있습니다.이 코드를 사용해보십시오. IDE에서 로컬로 실행하십시오.
build.gradle
buildscript { ext { springBootVersion = '1.2.5.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'spring-boot' apply plugin: 'io.spring.dependency-management' jar { baseName = 'demo' version = '0.0.1-SNAPSHOT' } sourceCompatibility = 1.8 targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") } eclipse { classpath { containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8' } } task wrapper(type: Wrapper) { gradleVersion = '2.3' }
Tag.java
package demo; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; public class Tag { private final String tagName; @JsonCreator public Tag(@JsonProperty("tagName") String tagName) { this.tagName = tagName; } public String getTagName() { return tagName; } @Override public String toString() { final StringBuilder sb = new StringBuilder("Tag{"); sb.append("tagName='").append(tagName).append('\''); sb.append('}'); return sb.toString(); } }
SampleController.java
package demo; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/backoffice/tags") public class SampleController { @RequestMapping(value = "/add", method = RequestMethod.POST) public void add(@RequestBody List<Tag> tags) { System.out.println(tags); } }
DemoApplication.java
package demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
-
==============================
2.실제로 메서드 이름을 사용할 수 있지만 메서드 유형이 필요한 형식과 다른 경우이 예외는 405를 throw합니다.
실제로 메서드 이름을 사용할 수 있지만 메서드 유형이 필요한 형식과 다른 경우이 예외는 405를 throw합니다.
from https://stackoverflow.com/questions/32479919/spring-boot-405-post-method-not-supported by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 오류 페이지에서 null 인증을 반환하는 Spring SecurityContext (0) | 2019.05.08 |
---|---|
[SPRING] JavaConfig의 Spring Bean 별칭 (0) | 2019.05.08 |
[SPRING] Spring MVC에서 403 Forbidden을 반환하려면 어떻게해야합니까? (0) | 2019.05.08 |
[SPRING] bean으로부터 Spring shutdown을 강제하는 가장 좋은 방법은? (0) | 2019.05.08 |
[SPRING] Spring Security 경고 : 클래스 AuthorityUtils는 추상적입니까? (0) | 2019.05.08 |