更好地记录杰克逊解析错误



我正在开发一个用Jackson-2.2.3构建的REST应用程序。

这是依赖项:

<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.2.3</version>
</dependency>

我有一个简单的端点来创建用户,如下所示:

@POST
@Path(value = "/addUser")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response createUser(User user) {
...
}

由于此端点使用 JSON,因此当 API 用户发送 JSON 时,杰克逊将解化User对象。

如果用户使用错误的 JSON 调用端点,例如缺少属性或结构错误。我想将错误 JSON 记录为字符串和错误。 我怎样才能做到这一点?

我尝试使用过滤器,但没有工作。

考虑处理JsonParseException

用于分析问题的异常类型,在遇到格式不正确的内容(不符合规范的 JSON 语法的内容(时使用。

要实现它,您可以使用ExceptionMapper

@Slf4j
@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
@Override
public Response toResponse(JsonParseException exception) {
log.error("Cannot parse JSON", exception);
return Response.status(Response.Status.BAD_REQUEST)
.entity("Cannot parse JSON")
.type(MediaType.TEXT_PLAIN)
.build();
}
}

出于日志记录目的,您可能还有兴趣使用exception.getLocation()JsonLocation中获取一些详细信息。


要在泽西岛注册异常映射器,请参阅此答案。