Spring @RequestMapping header 等于
Spring @RequestMapping header with equals
我想使用带有 header 属性的 Springs @RequestMapping 来检测值为 application/json;version=1.*
的 Accept
header。计划是为版本 2 映射另一个类似的方法,它将具有值 application/json;version=2.*
。
Spring 似乎忽略了版本值。我猜它把等号当作另一个 header 属性。
有办法解决这个问题吗?
旁注:
- 我无法更新 Spring 版本以支持
consumes
属性
- 我无法更改请求 header 的格式
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";
}
我想使用带有 header 属性的 Springs @RequestMapping 来检测值为 application/json;version=1.*
的 Accept
header。计划是为版本 2 映射另一个类似的方法,它将具有值 application/json;version=2.*
。
Spring 似乎忽略了版本值。我猜它把等号当作另一个 header 属性。
有办法解决这个问题吗?
旁注:
- 我无法更新 Spring 版本以支持
consumes
属性 - 我无法更改请求 header 的格式
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";
}