ExceptionMapper的执行顺序

din*_*707 12 java jax-rs

我有一个异常映射器如下

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以NotFoundException是一个RuntimeException.我想有3个异常映射器,它们映射

  1. 具有高优先级的NotFoundException
  2. 具有下一个优先级的RuntimeException
  3. 最后是例外

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

Pau*_*tha 16

它已经以优先级运行.最具体的一个是受欢迎的.

来自JAX-RS规范

在选择异常映射提供程序来映射异常时,实现必须使用其泛型类型是异常的最近超类的提供程序.

如果我没有正确理解你的问题,而你想让所有三个地图制作者都被击中,那就不会发生.每个请求只有一个映射器.这是避免无限循环的安全机制.