2017-06-02 64 views
1

我有一個簡單的@RestController,並且想要根據http標頭content-type同時回覆JSONXML如何在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頭?

+0

拆分方法的JSON和XML或此鏈接可能會幫助https://stackoverflow.com/questions/26676613/multiple-scenarios-requestmapping-produces-json-xml-together-with-accept-or-res –

+2

只是好奇 - 你不應該使用'Accept'頭文件來確保內容類型? – Antoniossss

+0

哈哈,我剛剛看到同樣的答案,並猜測我是對的:) – Antoniossss

回答

6

您應該使用Accept表頭不是Content-Type。第一個是請求,第二個包含在回覆中。

+0

哇,很棒的接球。這確實是解決方案! – membersound