【问题标题】:Spring MVC @RequestMapping headers can accept only one value?Spring MVC @RequestMapping 标头只能接受一个值?
【发布时间】: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”。

有什么建议吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    如果您使用的是 Spring 3.1.x。您可以查看使用@RequestMapping 注解的consumesproduces 属性。这是有关改进的 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 被方法接受
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2016-03-29
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多