gpt4 book ai didi

jackson - 如何从 REST 端点捕获 JsonParseException

转载 作者:行者123 更新时间:2023-12-01 08:26:38 26 4
gpt4 key购买 nike

我有一个这样的端点:

@POST
public Response update(MyDocument myDocument){}

如果请求无效,我的服务器会得到一些很长的日志,如下所示:

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: com.fasterxml.jackson.core.JsonParseException: Unexpected character....
...
Caused by...
...
Caused by...

异常很难完全避免,所以我想知道如何捕获 JsonParseException?

最佳答案

实现 ExceptionMapper对于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();
}
}

然后在您的 ResourceConfig 中以绑定(bind)优先级 注册它子类(见注释):

@ApplicationPath("api")
public class JerseyConfig extends ResourceConfig {

public JerseyConfig() {
register(JsonParseExceptionMapper.class, 1);
}
}

如果您没有使用 ResourceConfig子类,您可以注释 ExceptionMapper@Priority (见注释):

@Provider
@Priority(1)
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
...
}

注意 1:您可能还会发现创建另一个 ExceptionMapper 很有帮助对于 JsonMappingException .

注意2:优先考虑自己的ExceptionMapper如果你有JacksonFeature,s 就特别有用。已注册并且您想覆盖 JsonParseExceptionMapper 的行为和 JsonMappingExceptionMapper jackson-jaxrs-json-provider 附带的模块。看这个answer了解更多详情。

关于jackson - 如何从 REST 端点捕获 JsonParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50333676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com