JAX-RS异常处理和ExceptionMapper

时间:2015-09-03 12:57:45

标签: java exception-handling jax-rs exceptionmapper

我已经实现了一些自定义异常,例如: NotFoundException,BadRequestException,

对于他们每个人,我已经实现了自己的ExceptionMapper,如 NotFoundExceptionMapper,BadRequestExceptionMapper ,还有 GenericExceptionMapper

@Provider
public class GenericExceptionMapper implements ExceptionMapper<Throwable> {


    @Override
    @Produces( {MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON} )
    public Response toResponse(Throwable ex) {
        ErrorResponseWrapper errorResponse = new ErrorResponseWrapper(ex.getMessage(), 500, "");
        return Response.status(Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
    }
}

首先,这里的问题是 GenericExceptionMapper 不起作用,因为我没想到它会捕获JAX-RS引发的泛型异常,因为我认为这样的Mapper捕获的每个异常必须是早期的从 getResource()方法中显式抛出抛出SomeException {

此外,问题在于 RestEasy 我需要在 web.xm 中注册异常映射器。见下文:

 <!-- Custom exception handling provider -->
    <context-param>
        <param-name>resteasy.providers</param-name>
        <param-value>pl.salonea.jaxrs.exceptions.GenericExceptionMapper</param-value>
    </context-param>

这是另一个问题,因为我无法注册(或者我不知道如何注册)我定义的每个自定义ExceptionMapper。我只能注册SINGLE自定义ExceptionMapper。 如何注册所有这些?即NotFoundExceptionMapper,BadRequestExceptionMapper等

所以现在每个异常仅由Generic Exception Mapper映射,这是第一个问题。

这是RESTEasy的限制吗?在泽西岛的一些教程中我没有看到需要注册这样的ExceptionMappers但我也不知道是否可以有多个异常Mapper。

我想到的另一个解决方案(解决方法)是使用单个GenericExceptionMapper,并且在方法 toResponse(Throwable ex)中进行一些检查,如:

if(ex instanceof NotFoundException) { // send response type 1 
if(ex instanceof BadRequestException) { // send response type 2

寻求帮助

0 个答案:

没有答案