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

回到顶部