Spring Boot不支持的媒体类型

时间:2017-04-25 14:11:13

标签: java spring spring-boot

我正在使用 Spring Boot 构建一些 API ,但是当我尝试使用Postman进行查询时,我收到了有关Content-Type的错误。

@RequestMapping(path = "/verify", method = RequestMethod.POST, consumes = "text/xml", produces = "application/json")
    String verify(@RequestBody Map<String, Object> payload, HttpServletRequest request) {}

我不明白哪里有问题。

我注意到当我删除@RequestBody作为方法参数时,错误消失了。为什么?

我只想:

  • 将XML发送到API
  • 从API
  • 接收JSON

Postman call of API

6 个答案:

答案 0 :(得分:2)

如果您收到并且错误与Content-Type相关,那么我肯定会假设您使用 HTTP REST 作为组件之间进行通信的意思。

Content-Type HTTP REST 中的内容协商主题相关。

HTTP REST 中的

内容协商主题意味着客户端和服务必须就表示媒体类型达成一致。即他们需要就如何相互沟通达成一致,双方之间发送和接收的每个有效载荷的内容是什么。

客户通过 Accept标题

指定所需内容

服务器指定通过 Content-Type标题生成的内容

答案 1 :(得分:1)

尝试将jackson-dataformat-xml依赖项添加到类路径中,或者如果您使用构建工具maven(pom.xml)或gradle(build.gradle)。

注意:您可以text/xml支持application/xml... consumes = { "text/xml", "application/xml" } ...

注意:您可以使用MediaType成员代替字符串:... consumes = { MediaType.APPLICATION_XML, MediaType.TEXT_XML } ...

答案 2 :(得分:0)

尝试在邮递员中将Http Header Content-Type设置为text / xml。 您还可以查看当前Chrome DevTools中的内容类型标题 - &gt;网络标签 - &gt;点击您的请求 - &gt;标题标签。

答案 3 :(得分:0)

在application.properties中添加以下行:

logging.file = myapp.log

重启服务器,提出请求。检查myapp.log以查找失败的内容。 对我来说,我收到了这个错误:

2018-05-08 07:08:34.404 WARN 348 --- [http-nio-8080-exec-5] .cjMappingJackson2HttpMessageConverter:无法评估类型为[[simple type,class com.atta]的Jackson反序列化。 entity.User]]:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法处理托管/后向引用&#39; defaultReference&#39;:后台引用类型(java.util.List)与托管类型不兼容(com .atta.entity.State)

答案 4 :(得分:0)

更改

1)对header的邮递员请求的application/json的值

2)来自

consumes = "text/xml"

"application/json"

答案 5 :(得分:0)

在我的情况下,我有不正确的 JSON 属性映射,导致相同的异常

@JsonProperty("Total")
private List<XXX> SafeMembers;

我将 JSON 属性映射到 Total 而不是 SafeMembers。我改成如下

@JsonProperty("SafeMembers")
private List<XXX> SafeMembers;