我想将Springs @RequestMapping与header属性一起使用,以检测值为Acceptapplication/json;version=1.*标题。计划要为版本2类似地映射另一个方法,该方法的值将为application/json;version=2.*

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

有没有解决的办法?

旁注:


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

最佳答案

似乎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";
}

关于java - Spring @RequestMapping header 等于,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34425316/

10-10 01:32