Spring等于的@RequestMapping标头

时间:2015-12-22 22:13:50

标签: java spring header request-mapping

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

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

有解决方法吗?

附注:

  1. 我无法更新Spring版本以支持application/json;version=2.*属性
  2. 我无法更改请求标头的格式

1 个答案:

答案 0 :(得分:1)

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

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