ExceptionMapper 在 Jersey 2.x 和 javax 中无法始终如一地工作



我的api应用程序使用javax and jersey(暴露api端点)我正试图通过拥有实现ExceptionMapper的提供程序来捕获来自fastasterxml(在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;
}

任何想法?

当jackson反序列化失败时,我在Jersey Exception映射器的帮助下找到了解决方案

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

相关内容

  • 没有找到相关文章

最新更新