异常映射器的执行顺序

2022-09-04 02:09:24

我有一个异常映射器,如下所示

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class NotFoundMapper implements ExceptionMapper<NotFoundException> {

    private final Logger log = LoggerFactory.getLogger(getClass());
    private final MapperResponseBuilder responseBuilder = new MapperResponseBuilder();

    @Override
    public Response toResponse(NotFoundException ex) {
        log.warn("NotFoundException : " + ex.getMessage(), ex);
        return responseBuilder.buildErrorResponse(ex.getMessage(), Status.BAD_REQUEST);
    }
}

因此,NotFoundException是一个RuntimeException。我希望有3个异常映射器,这些映射器映射

  1. NotFound具有更高优先级的异常
  2. 运行时具有下一个优先级的异常
  3. 最后例外

有没有办法优先考虑这些?


答案 1

它已经以该优先级运行。最具体的是命中。

来自 JAX-RS 规范

选择异常映射提供程序来映射异常时,实现必须使用泛型类型为异常最接近的超类的提供程序。

如果我没有正确理解你的问题,相反,你希望所有三个映射器都被击中,那就不会发生。每个请求只命中一个映射器。这是一种避免无限循环的安全机制。


答案 2

推荐