我正在使用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,您有什么尝试的想法吗?
答案 0 :(得分:1)
JsonProcessingException
是JsonParseException
的超类。因此,对于JsonParseException
的映射器被调用而引发的JsonParseException
是有意义的。如果要覆盖它,请为JsonParseException
创建自己的映射器。您还需要为JsonMappingException
创建一个,因为Jackson也为此创建了一个。
仅供参考,所以您了解如何选择映射器,这是JAX-RS规范的引文
选择异常映射提供程序来映射异常时,实现必须使用其泛型类型为异常的最接近超类的提供程序。