415 Spring应用程序中不支持POST请求的MediaType

我有一个非常简单的Spring应用程序(没有Spring Boot)。我已经实现了GETPOST控制器方法。该GET方法效果很好。但是,POST正在抛出415 Unsupported MediaType。复制步骤如下

ServiceController. java

package com.example.myApp.controller;

import org.springframework.stereotype.Controller;

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.ResponseBody;

@Controller

@RequestMapping("/service/example")

public class ServiceController {

@RequestMapping(value="sample", method = RequestMethod.GET)

@ResponseBody

public String getResp() {

return "DONE";

}

@RequestMapping(value="sample2", method = RequestMethod.POST, consumes = "application/json")

@ResponseBody

public String getResponse2(@RequestBody Person person) {

return "id is " + person.getId();

}

}

class Person {

private int id;

private String name;

public Person(){

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

AppConfig.java

package com.example.myApp.app.config;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration

@EnableWebMvc

@ComponentScan("com.example.myApp")

public class AppConfig extends WebMvcConfigurerAdapter {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/test/**").addResourceLocations("/test/").setCachePeriod(0);

registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);

registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(0);

registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(0);

}

}

AppInitializer.java

package com.example.myApp.app.config;

import org.springframework.web.WebApplicationInitializer;

import org.springframework.web.context.ContextLoaderListener;

import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRegistration;

public class AppInitializer implements WebApplicationInitializer {

@Override

public void onStartup(ServletContext servletContext) throws ServletException {

// Create the 'root' Spring application context

AnnotationConfigWebApplicationContext rootContext =

new AnnotationConfigWebApplicationContext();

rootContext.register(AppConfig.class);

servletContext.addListener(new ContextLoaderListener(rootContext));

// Register and map the dispatcher servlet

ServletRegistration.Dynamic dispatcher =

servletContext.addServlet("dispatcher", new DispatcherServlet(rootContext));

dispatcher.setLoadOnStartup(1);

dispatcher.addMapping("/");

}

}

该代码在这里可用:

git clone https://bitbucket.org/SpringDevSeattle/springrestcontroller.git

./gradlew clean build tomatrunwar

这将旋转嵌入式tomcat。

现在你可以卷曲以下内容

curl -X GET -H "Content-Type: application/json" "http://localhost:8095/myApp/service/example/sample"

工作良好

curl -X POST -H "Content-Type: application/json" '{

"id":1,

"name":"sai"

}' "http://localhost:8095/myApp/service/example/sample2"

引发415不支持的MediaType

<body>

<h1>HTTP Status 415 - </h1>

<HR size="1" noshade="noshade">

<p>

<b>type</b> Status report

</p>

<p>

<b>message</b>

<u></u>

</p>

<p>

<b>description</b>

<u>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.</u>

</p>

<HR size="1" noshade="noshade">

<h3>Apache Tomcat/7.0.54</h3>

</body>

回答:

我找到了解决方案,因此我想在这里发布,以使他人受益。

首先,我需要在我的类路径中包含杰克逊,我在build.gradle中添加了以下内容:

 compile 'com.fasterxml.jackson.core:jackson-databind:2.7.5'

compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.5'

compile 'com.fasterxml.jackson.core:jackson-core:2.7.5'

接下来,我必须更改AppConfig其扩展范围WebMvcConfigurerAdapter,如下所示:

@Configuration

@EnableWebMvc

@ComponentScan("com.example.myApp")

public class AppConfig extends WebMvcConfigurerAdapter {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/test/**").addResourceLocations("/test/").setCachePeriod(0);

registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(0);

registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(0);

registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(0);

}

@Override

public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

converters.add(new MappingJackson2HttpMessageConverter());

super.configureMessageConverters(converters);

}

}

就这样,一切都很好

以上是 415 Spring应用程序中不支持POST请求的MediaType 的全部内容, 来源链接: utcz.com/qa/427341.html

回到顶部