【发布时间】:2016-11-17 13:18:14
【问题描述】:
尝试使用 Spring MVC 接收发布请求时出现错误(处理程序执行导致异常:不支持内容类型 'application/json')。
我的 Json,只是为了测试,非常简单:
{ "test": "abc123" }
我的 pojo 课:
public class Request {
String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
还有我的控制器:
@RequestMapping(value = "/testing", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
private void testing(@RequestBody Request body, @RequestHeader HttpHeaders headers, HttpServletRequest httpRequest) {
System.out.println(body.getTest());
}
在我的 pom.xml 中,我添加了:
<dependencies>
...
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.4.3</version>
</dependency>
</dependencies>
我认为json反序列化有问题,但是找不到。
欢迎任何帮助。谢谢。
【问题讨论】:
-
为什么在
produces上使用MediaType.APPLICATION_JSON_VALUE,而在consumes上使用字符串文字?当方法没有产生任何东西时,为什么你有produces和@ResponseBody?这可能会混淆 Spring MVC 以防止映射工作。 -
@Andreas,
MediaType.APPLICATION_JSON_VALUE只是"application/json"的常数,所以我不认为这是问题所在。无论如何,我删除了produces和@ResponseBody,但我仍然遇到同样的问题。 -
@PedroH 为什么你需要这个
consumes属性?它仅用于使映射更具体。删除它,然后重试。 -
@Nikem,谢谢,但我删除了
consumes,我遇到了同样的问题。 -
不要混合不同版本的杰克逊组件。并确保您要使用的 jackson 版本与您使用的 Spring MVC 版本兼容。
标签: java json spring spring-mvc