有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java相同的异常针对不同的异常

我的应用程序提供了一个RESTful接口来执行一些操作。我正在使用ExceptionMapper捕获异常,如NoResultExceptionEntityNotFoundException,然后返回状态代码404,或异常,如NumberFormatExceptionConstraintViolationException,并返回状态代码400。。。等等

我的问题是ExceptionMapper每次只允许我选择一种异常;所以我不能对所有的错误400使用同一个类,而对其他形式的错误404使用同一个类

有没有办法创建一个映射两种不同类型异常的ExceptionMapper

我的另一个选择是更改我的函数以返回响应而不是字符串(标记为@Produces("application/json"));),然后每次设置状态代码;但我认为这是最糟糕的


共 (1) 个答案

  1. # 1 楼答案

    您可以针对异常超类(即java.lang.Exception)编写一个ExceptionMapper,然后根据特定的异常类提供不同的行为,例如:

    public class MyExceptionMapper implements ExceptionMapper<Exception> {
        @Override
        public Response toResponse(Exception exception) {
            if (exception instanceof EntityNotFoundException) {
                ...
            }
            else (exception instanceof NumberFormatException) {
                ...
            }
            else {
                // The catch-all handler...
            }
        }
    }
    

    但在我看来,这并不像为每种类型的异常编写单独的映射程序那样干净。一方面,这个映射器将捕获所有异常,另一方面,随着时间的推移,这个类可能会扩展到难以处理的维度。也许这是代码风格的问题