5

是否可以为所有意外错误创建全局异常处理程序。因为不可能使所有可能的类都像这样:

public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}

我想要这样的东西:

public class ExceptionHandler implements ExceptionMapper<Exception> 
4

3 回答 3

11

请注意,尽管接受的答案确实捕获了所有异常,但它会导致许多其他问题,例如干扰 Resteasy 的内部异常处理

因此,如果您采用这种方法,您还应该为每个对您很重要的方法构建自定义异常映射。

特别是这个方法会破坏内置的CORS处理,所以如果你允许 CORS 响应,你应该创建一个 CORS 自定义异常映射器。

@Provider
public class DefaultOptionsExceptionHandler implements ExceptionMapper<DefaultOptionsMethodException> {

    @Override
    public Response toResponse(DefaultOptionsMethodException e) {
        return e.getResponse(); 
    }
}
于 2014-07-11T08:39:40.370 回答
6

您可能可以执行以下操作:

@Provider
public class GlobalExceptionHandler implements ExceptionMapper<Exception> {
    public Response toResponse(Exception exception) {
        return Response.status(Status.INTERNAL_SERVER_ERROR)
            .entity("An error occured").type(MediaType.TEXT_PLAIN)
            .build();
    }
}

我刚刚在 RESTEasy 3.0.6.Final 中对其进行了测试,它似乎可以工作。请记住,500 Internal Server Error状态代码可能并不总是合适的。

于 2014-07-07T09:47:35.093 回答
0

似乎没有简单的方法可以做到。我必须修改返回正确的 ExceptionMapper 的 ResteasyProviderFactory。但是我应该更改几个类,因为直接使用内置类 ResteasyProviderFactory

于 2012-12-13T14:46:33.860 回答