2011-02-10 69 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"}