Spring MVC @RequestMapping标头只能接受一个值吗?

时间:2011-02-10 20:03:05

标签: spring-mvc http-headers content-type

这将有效:

@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"}) {
    .......
}


我想这是因为Spring认为两个内容类型值具有“AND”关系,但我希望它们是“OR”。

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:33)

如果您使用的是 Spring 3.1.x 。您可以查看@RequestMapping注释的消耗生成属性。这是关于改进的Spring博客文章:

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"}

答案 1 :(得分:22)

您是否尝试过content-type=application/json,application/xml

不确定它是否可行但在其中放置两个content-type标题我认为只有一个会赢。

对于使用不同RequestMapping标题的同一方法,可能会使用两个content-type注释吗?