2017-05-31 2 views
2

J'utilise le printemps pour créer mon application web.Comment configurer le ressort pour ignorer l'en-tête Accepter invalide?

Dans ma base de classe, je configuration personnalisée WebMvcConfigurationSupportContentNegotiationConfigurer comme suit:

@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); 
} 

Je ne peux pas mettre ignoreAcceptHeader à true, puisque certains de mes clients comptent sur cet en-tête pour la réponse.

Mais lorsque je tente d'accéder à mon API avec un en-tête Accept invalide comme Accept: :*/* (notez que deux points supplémentaires), le ressort redirige vers la page d'erreur /error, avec le journal suivant:

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" 

Puis-je changer cette comportement? Je veux ignorer Accept en-tête complètement au lieu de sauter à la page d'erreur. Est-ce possible?

Répondre

1

Utilisez un filtre pour intercepter les demandes avec un en-tête incorrect et enveloppez-les en remplaçant (ou en supprimant) le mauvais en-tête.

Adding an HTTP Header to the request in a servlet filter

Dans l'exemple changer la méthode 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); 
}