gpt4 book ai didi

java - ExceptionMapper 在 Jersey 2.x 和 javax 中无法一致工作

转载 作者:行者123 更新时间:2023-12-01 09:24:56 32 4
gpt4 key购买 nike

我正在为我的 api 应用程序使用 javax 和 jersey(公开 api 端点)我试图通过实现 ExceptionMapper 的 Provider 来捕获来自 fastXml (在 put 和 post 调用时)的异常。

我的问题是,在 POST 或 PUT 上,每当我发送错误的属性名称时,有时我的映射器会捕获异常,有时则不会。例如:

  1. 运行我的应用程序一次 -> 一切都按预期工作,捕获异常。

  2. 再次运行我的应用程序(重新启动)-> 映射器没有捕获任何内容

我正在使用 Jersey 2.x,托管在 tomcat 中(不使用 spring 或类似的东西)。

web.xml:

<servlet>
<servlet-name>api-service-endpoints</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
com.api.providers,
com.api.resources
</param-value>

</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

提供商代码:

@Provider
public class JsonMappingExceptionProvider
implements ExceptionMapper<JsonMappingException> {

public JsonMappingExceptionProvider() {
log.info("JsonMappingExceptionProvider created..");
}

private static final Logger log = LoggerFactory
.getLogger(JsonMappingExceptionProvider.class);

@Override
public Response toResponse(JsonMappingException exception) {
log.error("Error while parsing input", exception);
Response response = createBadRequestResponse();
return response;
}

有什么想法吗?

最佳答案

我在 Jersey Exception mappers not working when jackson deserialization fails 的帮助下找到了解决方案

由于 jersey 试图在其映射器列表中找到给定异常的最佳匹配,因此您必须将映射器映射到您要捕获的确切异常,因为映射器的顺序是任意的。 Jackson 有它自己的映射器来处理一般的 json 异常,因此您应该尝试让您的映射器捕获您想要的异常。

关于java - ExceptionMapper 在 Jersey 2.x 和 javax 中无法一致工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39910075/

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