Spring Boot 405 POST方法不受支持?
Spring Boot" title="Spring Boot">Spring Boot MVC如何不支持POST方法?我正在尝试实现一个简单的post方法,该方法接受实体列表:这是我的代码
@RestController(value="/backoffice/tags")public class TagsController {
@RequestMapping(value = "/add", method = RequestMethod.POST)
public void add(@RequestBody List<Tag> keywords) {
tagsService.add(keywords);
}
}
像这样点击此网址:
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"
}
:
调试Spring Web请求处理程序
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}
回答:
RestController注释定义中存在错误。根据文档,它是:
公共@interface RestController {
/ 该值可能表明建议使用逻辑组件名称,如果自动检测到组件,则将其转换为Spring bean。 @返回建议的组件名称(如果有的话)
@自4.0.1开始* /字符串value()默认为“”;
}
这意味着您输入的值(“ / backoffice / tags”)是控制器的名称,而不是其可用路径。
添加@RequestMapping("/backoffice/tags")
控制器的类,并从@RestController
注释中删除值。
完全正常工作的示例,根据注释它不起作用-请尝试使用此代码-并从IDE本地运行。
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'
}
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();
}
}
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);
}
}
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);
}
}
以上是 Spring Boot 405 POST方法不受支持? 的全部内容, 来源链接: utcz.com/qa/432785.html