Spi*_*der 2 jersey jackson jackson-databind
我有一个这样的端点:
@POST
public Response update(MyDocument myDocument){}
Run Code Online (Sandbox Code Playgroud)
如果请求无效,我的服务器将获得一些较长的日志,如下所示:
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: com.fasterxml.jackson.core.JsonParseException: Unexpected character....
...
Caused by...
...
Caused by...
Run Code Online (Sandbox Code Playgroud)
很难完全避免该异常,所以我想知道如何捕获JsonParseException?
实施ExceptionMapperfor JsonParseException。它将允许您将给定的异常映射到响应。请参阅以下示例:
@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
@Override
public Response toResponse(JsonParseException exception) {
return Response.status(Response.Status.BAD_REQUEST)
.entity("Cannot parse JSON")
.type(MediaType.TEXT_PLAIN)
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在子类中以绑定优先级注册它(请参见注释):ResourceConfig
@ApplicationPath("api")
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
register(JsonParseExceptionMapper.class, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的不是ResourceConfig子类,你可以注释ExceptionMapper用(见注):@Priority
@Provider
@Priority(1)
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
...
}
Run Code Online (Sandbox Code Playgroud)
注意1:您可能还会发现为创建另一个ExceptionMapper帮助JsonMappingException。
注2:给予优先考虑到自己ExceptionMapper■如果你有特别有用JacksonFeature注册并要重写的行为JsonParseExceptionMapper,并JsonMappingExceptionMapper附带jackson-jaxrs-json-provider模块。有关更多详细信息,请参见此答案。
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |