2016-10-07 4 views
0

J'utilise javax and jersey pour mon application api (exposant les points de terminaison api) J'essaie d'attraper des exceptions provenant de fasterXml (sur les appels put et post) en ayant un fournisseur qui implémente ExceptionMapper.ExceptionMapper ne fonctionne pas régulièrement dans Jersey 2.x & javax

Mon problème est que le POST ou PUT, chaque fois que je vous envoie des attributs mauvais noms, parfois mon mappeur attraper les exceptions et parfois il ne fonctionne pas. Par exemple:

  1. Courir ma demande une fois -> tout fonctionne comme prévu, attrapant exceptions.

  2. L'exécution de ma demande à nouveau (redémarrage) -> le cartographe ne saisit pas rien

J'utilise 2.x Jersey, hébergement en tomcat (ne pas utiliser le printemps ou quelque chose comme ça).

web.xml:

<servlet> 
    <servlet-name>api-service-endpoints</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value> 
      com.api.providers, 
      com.api.resources 
     </param-value> 

    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Code fournisseur:

@Provider 
public class JsonMappingExceptionProvider 
    implements ExceptionMapper<JsonMappingException> { 

public JsonMappingExceptionProvider() { 
    log.info("JsonMappingExceptionProvider created.."); 
} 

private static final Logger log = LoggerFactory 
     .getLogger(JsonMappingExceptionProvider.class); 

@Override 
public Response toResponse(JsonMappingException exception) { 
    log.error("Error while parsing input", exception); 
    Response response = createBadRequestResponse(); 
    return response; 
} 

Toutes les idées?

Répondre

1

J'ai trouvé la solution avec l'aide de Jersey Exception mappers not working when jackson deserialization fails

Depuis Jersey tente de trouver la meilleure correspondance pour les exceptions données au sein de sa liste des cartographes, vous devez mapper votre mappeur à l'exception exacte que vous essayez de attraper, puisque l'ordre du mappeur est arbitraire. Jackson a son propre mapper pour l'exception générale de json, par conséquent vous devriez essayer de faire votre mapper attraper les exceptions que vous voulez.