当我用Postman
发送带有JSON正文(application/json
)的帖子请求时,我在spring-mvc
中收到此错误(我没有使用spring boot
)
Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json' not supported
我尝试了所有有关此错误的主题,但没有任何效果:(
我在Jackson
中也包含了pom.xml
的依赖关系,以将JSON对象映射到POJO。
那么为什么它总是告诉我Content type 'application/json' not supported
!
我的控制器
@RestController
public class FooRest {
// even with consumes=MediaType.APPLICATION_JSON_VALUE it does not work
@RequestMapping(value = "/api/foo", method = RequestMethod.POST)
public String foo(HttpServletRequest request, @RequestBody FooBean bean) {
...
}
}
我的配置
@Configuration
@EnableWebMvc
@ComponentScan({"controllers"})
public class AppConfig implements WebMvcConfigurer { }
我的pom.xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
...
</dependencies>
卷曲版本
POST /MY-API HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 89859e26-813d-fb53-8726-57900f02207e
{
//JSON OBJECT
}
解决方案
我改变了
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
收件人
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
终于奏效了:)有人可以解释一下为什么吗?
答案 0 :(得分:1)
顺便说一下,@PostMapping
是@RequestMapping
批注的专用版本,它是@RequestMapping(method = RequestMethod.POST)
的快捷方式。
在Spring配置(content-negotiation
)中不做任何更改,用@PostMapping
注释的方法使用并产生默认媒体类型(即application/json
)的内容。仅当您要消费和产生其他媒体类型(即consumes
)中的内容时,才有理由使用produces
的{{1}}和@PostMapping
属性。
因此,以下代码适合您:
application/xml
最后,您需要在请求中将@RestController
public class FooRest {
@PostMapping("/api/foo")
public String foo(HttpServletRequest request, @RequestBody FooBean bean) {
...
}
}
标头作为accepts
您可以与我们分享您所请求的application/json
版本吗?