Voi*_*ain 5 java spring http spring-mvc http-accept-header
我正在使用 spring 来构建我的网络应用程序。
在我的自定义WebMvcConfigurationSupport类中,我设置基本ContentNegotiationConfigurer如下:
@Override
public void configureContentNegotiation(final ContentNegotiationConfigurer configurer) {
configurer
.favorPathExtension(false)
.favorParameter(true)
.parameterName("mediaType")
.ignoreAcceptHeader(false)
.useJaf(false)
.defaultContentType(MediaType.APPLICATION_XML)
.mediaType("json", MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML);
}
Run Code Online (Sandbox Code Playgroud)
我无法设置ignoreAcceptHeader为true,因为我的一些客户依赖此标头进行响应。
但是,当我尝试使用无效Accept标头Accept: :*/*(请注意,额外的冒号)访问我的 API 时,spring 会重定向到错误页面/error,并显示以下日志:
@Override
public void configureContentNegotiation(final ContentNegotiationConfigurer configurer) {
configurer
.favorPathExtension(false)
.favorParameter(true)
.parameterName("mediaType")
.ignoreAcceptHeader(false)
.useJaf(false)
.defaultContentType(MediaType.APPLICATION_XML)
.mediaType("json", MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML);
}
Run Code Online (Sandbox Code Playgroud)
我可以改变这种行为吗?我想Accept完全忽略标题而不是跳转到错误页面。那可能吗?
使用过滤器拦截具有错误标头的请求并将其包装以替换(或删除)错误标头。
在示例中将getHeader()方法更改为
public String getHeader(String name) {
if ("accept".equals(name)) {
return null; //or any valid value
}
String header = super.getHeader(name);
return (header != null) ? header : super.getParameter(name);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4797 次 |
| 最近记录: |