2016-08-25 1 views
0

EDIT: C'était un problème dans les versions antérieures de ackson-jaxrs-base, qui est résolu dans jackson-jaxrs-base-2.8. https://github.com/FasterXML/jackson-jaxrs-providers/issues/22Jersey 2.x ExceptionMapper Parent Mapping

Je suis aux prises avec ce problème, avec un mappeur d'exception. Je veux mapper tous les enfants de com.fasterxml.jackson.core.JsonProcessingException dans un ExceptionMapper sinlge.

voici mon code:

@Provider 
public class JsonProcessingExceptionMapper implements ExceptionMapper<JsonProcessingException> { 

    @Override 
    public Response toResponse(JsonProcessingExceptionexception) { 
     return Response.status(Response.Status.BAD_REQUEST) 
       .entity("json parsing error!")).build(); 
    } 

fonctionne très bien avec le code suivant:

@Provider 
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> { 

    @Override 
    public Response toResponse(JsonMappingException exception) { 
     return Response.status(Response.Status.BAD_REQUEST) 
       .entity("parsing error!").build(); 
    } 
} 

EDIT: JsonProcessingException est parent de JsonMappingException je suis exactement ce que fais mal ici?

Répondre

0

La classe com.fasterxml.jackson.jaxrs.base.JsonMappingExceptionMapper existe dans la bibliothèque lib et implémente ExceptionMapper. Donc, dans le premier cas, ce mappeur est le plus approprié que le vôtre car il gère JsonMappingException, mais le vôtre gère JsonProcessingException commun. Dans le second cas votre mapper a le même niveau avec ce mappeur, donc il peut être appliqué.

+0

Ainsi, il n'existe aucun moyen de mapper tous les enfants de JsonProcessingException dans un seul ExceptionMapper? – user3454970

+0

Je ne sais pas s'il est possible de supprimer le fournisseur. Peut-être que vous devez faire une solution de contournement. Mais probablement ce http://stackoverflow.com/questions/17794372/removing-an-added-provider-in-jersey vous aidera. – kosbr

0

répondre à ma propre question:

Je suis mon problème fixé de manière suivante. mis à jour des bocaux jackson à 2,8x et ajouté l'annotation suivante.

@Priority(4000) 
@Provider 
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> { 

    @Override 
    public Response toResponse(JsonMappingException exception) { 
     return Response.status(Response.Status.BAD_REQUEST) 
       .entity("parsing error!").build(); 
    } 
} 

cela fonctionne comme prévu maintenant.