【问题标题】:Spring @RequestMapping header with equalsSpring @RequestMapping 标头与等于
【发布时间】:2016-03-29 06:38:39
【问题描述】:

我想使用带有 header 属性的 Springs @RequestMapping 来检测值为 application/json;version=1.*Accept 标头。计划是为版本 2 类似地映射另一个方法,其值为 application/json;version=2.*

Spring 似乎忽略了版本值。我猜它将等号视为另一个标题属性。

有没有办法解决这个问题?

旁注:

  1. 我无法更新 Spring 版本以支持 consumes 属性
  2. 我无法更改请求标头的格式

【问题讨论】:

  • 您如何检索标头值?可以出示一下代码吗?

标签: java spring header request-mapping


【解决方案1】:

似乎spring requestmapping忽略了媒体类型参数。 您可以通过手动将请求路由到首选端点来解决此问题。

@RequestMapping(value = "/", headers = "Accept=application/json")
@ResponseBody
String request(@RequestHeader HttpHeaders headers){
    for(MediaType mediaType : headers.getAccept()){
        if(mediaType.isCompatibleWith(MediaType.APPLICATION_JSON)){
            if(mediaType.getParameter("version").startsWith("1.")){
                return v1();
            }else if(mediaType.getParameter("version").startsWith("2.")){
                return v2();
            }
        }
    }
    return "error";
}

【讨论】:

  • 感谢您的回答。不过这很不幸。我希望避免这种解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-09-04
  • 2023-03-23
  • 2011-06-25
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
相关资源
最近更新 更多