2011-02-10 75 views
11

這將工作:spring mvc @RequestMapping標題只能接受一個值嗎?

@RequestMapping(value = "/test", method = RequestMethod.POST, 
    headers = {"content-type=application/json"}) 
{ 
....... 
} 

如果我增加了一個價值像下文中,它會失敗,並告訴我「指定的HTTP方法是不允許用於所請求的資源(請求方法‘POST’不支持)」

@RequestMapping(value = "/test", method = RequestMethod.POST, 
    headers = {"content-type=application/json","content-type=application/xml"}) 
{ 
....... 
} 

我對這個問題的猜測是,春認爲這兩個內容類型值是‘和’的關係,但我代替希望他們能‘或’。有什麼建議麼?謝謝!

回答

19

您是否嘗試過content-type=application/json,application/xml

不知道它是否會工作,但將兩個content-type標題在那裏我認爲只有一個會贏。

OR

對不同content-type頭同樣的方法possibily使用兩個RequestMapping註解?

+2

「content-type = application/json,application/xml」工作!謝謝! – Bobo 2011-02-10 20:32:46

+1

太棒了!聽到那個消息很開心! – 2011-02-10 21:30:15

30

如果您使用Spring 3.1.x。你可以看看使用消耗,產生的屬性的@RequestMapping註解。這裏是關於改進的彈簧博客文章:

http://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements/

片段從上面的文檔:

@RequestMapping(value="/pets", headers="Content-Type=application/json") 
public void addPet(@RequestBody Pet pet, Model model) { 
    // ... 
} 

被替換爲:

@RequestMapping(value="/pets", consumes="application/json") 
public void addPet(@RequestBody Pet pet, Model model) { 
    // ... 
} 

另外,如果你需要多種媒體類型。您可以執行以下操作:

produces={"application/json", "application/xml"} 

consumes={"application/json", "application/xml"}