2017-04-23 33 views
0
@RequestMapping(value = "/test", method = RequestMethod.GET, produces = { "text/plain", "application/json" }) 

如果我发送一个请求:春RestController只考虑第一介质类型和忽略其余部分

curl --header "Accept: text/plain, application/json" "http://localhost:8229/test/test" 

它发回的HTML响应正文406不可接受的响应。预期响应是一个200 OK的JSON对象。

但是,如果我反向MIME类型的顺序:

curl --header "Accept: application/json, text/plain" "http://localhost:8229/test/test" 

然后,它发送预期的响应(在JSON)。

这是预期的行为?为什么它忽略了第二种媒体类型?

PS:我使用Spring 1.3.5启动释放

编辑:我得到同样的错误,如果我送"Accept: */*"。该API可以根据内部条件返回JSON或text/plain。

+0

因为这是谈判的内容是如何工作的。它从最需要的到较不理想的一个。在你的第一个请求中,你显然比JSON更喜欢文本。但我怀疑你没有在服务器端配置任何东西来返回纯文本。 –

+0

我是否需要特别配置某些东西?我以为春天会检查是否在返回最需要的MIME类型,所需较少会被选中(如果是这样的一个返回),然后返回。 我还曾试图“接受:*/*”,我这得到了同样的错误。 – Rushil

+0

我已经编辑了问题 – Rushil

回答

2

我想这是因为在服务器端没有配置你的Web配置组件。请参阅Content Negotiation进行配置。

+0

我看到有在XML和Java方法配置。但是没有看到任何基于Annotation的配置。你知道任何可以完成这项工作的注释吗? – Rushil

+0

有一些主题XML和Java类基础的配置。没有具体的注释,只是使用java配置而不是xml。使用ContentNegotiationConfigurer类来配置mediaType等。 –

相关问题