Jersey 2.x ExceptionMapper父映射

时间:2016-08-25 13:49:08

标签: java jackson jax-rs jersey-2.0 jackson2

编辑:这是早期版本的ackson-jaxrs-base中的一个问题,它在jackson-jaxrs-base-2.8中得到解决。 https://github.com/FasterXML/jackson-jaxrs-providers/issues/22

我正在努力解决这个问题,使用异常映射器。我想在一个sinlge ExceptionMapper中映射com.fasterxml.jackson.core.JsonProcessingException的所有子代。

这是我的代码:

@Provider
public class JsonProcessingExceptionMapper implements ExceptionMapper<JsonProcessingException> {

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

可以使用以下代码正常工作:

@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {

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

编辑:JsonProcessingException是JsonMappingException的父级 究竟我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

类com.fasterxml.jackson.jaxrs.base.JsonMappingExceptionMapper存在于lib中,它实现了ExceptionMapper。

所以在第一种情况下,这个mapper比你的更合适,因为它处理JsonMappingException,但你的处理常见的JsonProcessingException。

在第二种情况下,您的映射器与此映射器具有相同的级别,因此可以应用它。

答案 1 :(得分:0)

回答我自己的问题:

我通过以下方式修复了我的问题。 更新杰克逊罐子到2.8倍并添加了以下注释。

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

现在按预期工作。