如何创建有效的自定义JSON解析异常映射?

时间:2019-01-30 17:00:46

标签: java exception jackson jersey mapping

我正在使用jersey-media-json-jackson-2.27,它具有内部jackson.jaxrs.base,其中JsonParseExceptionMapper用来在收到无法解析的JSON时发送“ 400 Bad Request”。但是我想要我自己的自定义映射器。

我已经创建了自己的自定义异常映射器。

我已经尝试设置注释@Priority(1),将其注册到我的ResourceConfig中,例如register(ApplicationJsonExceptionMapper.class)并使用register(ApplicationJsonExceptionMapper.class,1)。我也有注册(JacksonJaxbJsonProvider.class)。

package com.application.provider;

import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.core.JsonProcessingException;

@Provider
public class ApplicationJsonExceptionMapper implements 
ExceptionMapper<JsonProcessingException> {

    @Override
    public Response toResponse(JsonProcessingException 
jsonProcessingException) {
        String responseMessage = "Invalid JSON";
        return Response.status(Response.Status.BAD_REQUEST).entity(responseMessage).type("text/plain").build();
}

}

不幸的是,当我发送无效的JSON时,它仍然使用内置的JsonParseExceptionMapper,您有什么尝试的想法吗?

1 个答案:

答案 0 :(得分:1)

JsonProcessingExceptionJsonParseException的超类。因此,对于JsonParseException的映射器被调用而引发的JsonParseException是有意义的。如果要覆盖它,请为JsonParseException创建自己的映射器。您还需要为JsonMappingException创建一个,因为Jackson也为此创建了一个。

仅供参考,所以您了解如何选择映射器,这是JAX-RS规范的引文

  

选择异常映射提供程序来映射异常时,实现必须使用其泛型类型为异常的最接近超类的提供程序。