我有一個簡單的@RestController
,並且想要根據http標頭content-type
同時回覆JSON
或XML
。如何在spring-mvc中爲響應啓用多個內容類型?
問題:我總是隻得到XML
響應,從來沒有JSON。當然,我使用Content-Type: application/json
作爲http頭。
以下配置可能會丟失什麼?
@RestController
public void MyServlet {
@RequestMapping(value = "test", method = RequestMethod.GET,
produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
public MyResponse test() {
return new MyResponse();
}
}
@XmlRootElement
public class MyResponse {
private String test = "somevalue";
//getter, setter
}
的pom.xml:
<!-- as advised in: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId>
</dependency>
有趣的是:如果我切換產生的語句: produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
, 然後我一直都想與JSON
出永不XML
!
所以問題是:爲什麼第一個MediaType總是有優先權,並且從未考慮過http頭?
拆分方法的JSON和XML或此鏈接可能會幫助https://stackoverflow.com/questions/26676613/multiple-scenarios-requestmapping-produces-json-xml-together-with-accept-or-res –
只是好奇 - 你不應該使用'Accept'頭文件來確保內容類型? – Antoniossss
哈哈,我剛剛看到同樣的答案,並猜測我是對的:) – Antoniossss