Spring MVC @RequestMapping 标头只能接受一个值?
Posted
技术标签:
【中文标题】Spring MVC @RequestMapping 标头只能接受一个值?【英文标题】:Spring MVC @RequestMapping headers can accept only one value? 【发布时间】:2011-06-25 02:58:45 【问题描述】:这将起作用:
@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 认为这两个 content type 值具有“AND”关系,但我希望它们是“OR”。
有什么建议吗?
谢谢!
【问题讨论】:
【参考方案1】:如果您使用的是 Spring 3.1.x。您可以查看使用@RequestMapping 注解的consumes、produces 属性。这是有关改进的 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"
【讨论】:
我有一个疑问 - 当我写produces = "application/xml"
时,它仍然给我错误 406。但是如果写 produces = "application/xml", headers = "Content-Type=application/xml"
,那么一切正常。所以我的问题是为什么produces
不足以返回XML响应,需要headers
来完成任务。【参考方案2】:
你试过content-type=application/json,application/xml
吗?
不确定它是否会起作用,但我认为在其中放置两个 content-type
标头会赢。
或
可能在具有不同content-type
标头的同一方法上使用两个RequestMapping
注释?
【讨论】:
"content-type=application/json,application/xml" 工作!谢谢! @dave G 只有一个@RequestMapping
被方法接受以上是关于Spring MVC @RequestMapping 标头只能接受一个值?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Spring Boot mybatis分布式微服务云架构(十三)使用Spring Security安全控制
Spring Boot2 系列教程 (十五) | 服务端参数校验之一
Spring MVC学习笔记---Spring MVC 的HelloWorld