Ade*_*lin 7 java spring spring-boot
怎样POST方法不支持Spring Boot 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);
}
}
Run Code Online (Sandbox Code Playgroud)
点击此URL如下:
http://localhost:8090/backoffice/tags/add
Run Code Online (Sandbox Code Playgroud)
请求机构:
[{"tagName":"qweqwe"},{"tagName":"zxczxczx"}]
Run Code Online (Sandbox Code Playgroud)
我收到:
{
"timestamp": 1441800482010,
"status": 405,
"error": "Method Not Allowed",
"exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
"message": "Request method 'POST' not supported",
"path": "/backoffice/tags/add"
}
Run Code Online (Sandbox Code Playgroud)
编辑:
调试Spring Web Request Handler
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");
}
}
Run Code Online (Sandbox Code Playgroud)
只有两个方法supportedMethodsARE{GET,HEAD}
Raf*_* G. 12
您在RestController注释定义中有错误.根据文件,它是:
public @interface RestController {
/***该值可能表示对逻辑组件名称的建议,*在自动检测组件的情况下将变为Spring bean.*@return建议的组件名称,如果有*@since 4.0.1*/String value()默认为"";
}
这意味着您输入的值("/ backoffice/tags")是控制器的NAME,而不是它可用的路径.
添加@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'
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33701 次 |
| 最近记录: |