我正在开发一个用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
中获取一些详细信息。
要在泽西岛注册异常映射器,请参阅此答案。