【问题标题】:JAX-RS (jersey implementation) ExceptionMapper<Throwable> aren't catching ConstraintViolationExceptionJAX-RS(球衣实现) ExceptionMapper<Throwable> 没有捕获 ConstraintViolationException
【发布时间】:2019-04-03 10:13:57
【问题描述】:

我有一个ExceptionMapper 作为@Provider 用于处理我的所有异常。

所以很明显,我的类实现了ExceptionMapper&lt;Throwable&gt;,我们知道,所有异常都以某种方式扩展了Throwable

现在我使用 jax-rs @NotNull 来检查我的资源输入值是否不为空,通过一些搜索,我意识到当带注释的字段为空时它会抛出 ConstraintViolationException

所以我尝试在我的 ExceptionMapper 中处理它并添加一些响应细节(添加一些自定义 json 模型),如下所示:

@Provider
public class AllExceptionMapper implements ExceptionMapper<Throwable> {

    private final Logger logger = LogManager.getLogger(AllExceptionMapper.class);

    @Override
    public Response toResponse(Throwable ex) {
        Response response;
        CustomError error;
        // handle some errors

        else if (ex instanceof ConstraintViolationException) {
             error = new CustomError(
                 324, // predefined error type in our documents
                 "some details"
             );
             response = Response.status(Response.Status.BAD_REQUEST).entity(error).build();
        }

        // handle some other errors

        return response;
    }

}

问题是这不起作用,但如果我要创建另一个实现ExceptionMapper&lt;ConstraintViolationException&gt; 的异常映射器提供程序并在那里处理它,它可以正常工作。

正如我之前所说(并且也检查过)所有异常都以某种方式从 Throwable 类扩展,所以我缺少什么以及为什么它不起作用?

......

不起作用,我的意思是它忽略了我的映射器(从 ExceptionMapper&lt;Throwable&gt; 实现的映射器)并且具有返回状态代码 400 且没有响应负载的正常行为,就像根本没有映射器一样

【问题讨论】:

  • 这不起作用是什么意思?目前的行为是什么?
  • @SBylemans 它忽略了我的映射器(实现 Throwable 的映射器)并且表现正常,就像根本没有映射器一样
  • 不确定是什么原因造成的,但也许已经有一个内置映射器使用继承树中较低的泛型类实现ExceptionMapper
  • @SBylemans 在继承树中是否有任何低于Throwable 的异常情况?
  • @SBylemans 我不知道它是否有用,但我正在使用spring-boot-starter-jersey

标签: java jersey exceptionmapper


【解决方案1】:

ExceptionMapper 应该工作的方式是,您可以创建一个通用的ExceptionMapper&lt;Throwable&gt;,它可以处理所有错误。然后您可以创建更具体的ExceptionMappers,以另一种方式处理更具体的错误。所有这些都在单独的类中。

在单独的类中执行此操作对您有用,让我相信在某处有一个更具体的ExceptionMapper,它可以在您之前处理异常。

ExceptionMappers 的使用方式实际上非常干净,并且还可以保持您的代码干净。想要将代码保存在一个中心位置,将导致巨大的if...

【讨论】:

  • 天哪,我希望我早点找到这个解释..
猜你喜欢
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
相关资源
最近更新 更多