如何配置 spring 以忽略无效的接受 header?
How to config spring to ignore invalid Accept header?
我正在使用 spring 构建我的网络应用程序。
在我的自定义 WebMvcConfigurationSupport
class 中,我设置基本 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);
}
我无法将 ignoreAcceptHeader
设置为 true
,因为我的一些客户依赖此 header 进行响应。
但是当我尝试使用无效的 Accept
header 访问我的 API 时,例如 Accept: :*/*
(注意额外的冒号), spring 重定向到错误页面 /error
,包含以下日志:
12:18:14.498 468443 [6061] [qtp1184831653-73] DEBUG o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver
Resolving exception from handler [public MyController.myAction() throws java.io.IOException]: org.springframework.web.HttpMediaTypeNotAcceptableException:
Could not parse accept header [: application/json,*/*]: Invalid mime type ": application/json": Invalid token character ':' in token ": application"
我可以改变这种行为吗?我想完全忽略 Accept
header 而不是跳转到错误页面。这可能吗?
使用过滤器拦截错误的请求 header 并将它们替换(或删除)错误的 header.
Adding an HTTP Header to the request in a servlet filter
在示例中将 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);
}
我正在使用 spring 构建我的网络应用程序。
在我的自定义 WebMvcConfigurationSupport
class 中,我设置基本 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);
}
我无法将 ignoreAcceptHeader
设置为 true
,因为我的一些客户依赖此 header 进行响应。
但是当我尝试使用无效的 Accept
header 访问我的 API 时,例如 Accept: :*/*
(注意额外的冒号), spring 重定向到错误页面 /error
,包含以下日志:
12:18:14.498 468443 [6061] [qtp1184831653-73] DEBUG o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver
Resolving exception from handler [public MyController.myAction() throws java.io.IOException]: org.springframework.web.HttpMediaTypeNotAcceptableException:
Could not parse accept header [: application/json,*/*]: Invalid mime type ": application/json": Invalid token character ':' in token ": application"
我可以改变这种行为吗?我想完全忽略 Accept
header 而不是跳转到错误页面。这可能吗?
使用过滤器拦截错误的请求 header 并将它们替换(或删除)错误的 header.
Adding an HTTP Header to the request in a servlet filter
在示例中将 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);
}