Как настроить Spring, чтобы игнорировать неверный заголовок Accept?
Я использую 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);
}
Я не могу установить ignoreAcceptHeader
в true
, так как некоторые из моих клиентов полагаются на этот заголовок для ответа.
Но когда я пытаюсь получить доступ к моему API с недействительным Accept
как заголовок 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
заголовок полностью вместо перехода на страницу ошибки. Это возможно?
1 ответ
Используйте фильтр, чтобы перехватывать запросы с неправильным заголовком и переносить их, заменяя (или удаляя) неправильный заголовок.
Добавление заголовка HTTP к запросу в фильтре сервлета
В примере измените 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);
}