是否可以为所有意外错误创建全局异常处理程序。因为不可能使所有可能的类都像这样:
public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}
我想要这样的东西:
public class ExceptionHandler implements ExceptionMapper<Exception>
是否可以为所有意外错误创建全局异常处理程序。因为不可能使所有可能的类都像这样:
public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}
我想要这样的东西:
public class ExceptionHandler implements ExceptionMapper<Exception>
请注意,尽管接受的答案确实捕获了所有异常,但它会导致许多其他问题,例如干扰 Resteasy 的内部异常处理。
因此,如果您采用这种方法,您还应该为每个对您很重要的方法构建自定义异常映射。
特别是这个方法会破坏内置的CORS处理,所以如果你允许 CORS 响应,你应该创建一个 CORS 自定义异常映射器。
@Provider
public class DefaultOptionsExceptionHandler implements ExceptionMapper<DefaultOptionsMethodException> {
@Override
public Response toResponse(DefaultOptionsMethodException e) {
return e.getResponse();
}
}
您可能可以执行以下操作:
@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
状态代码可能并不总是合适的。
似乎没有简单的方法可以做到。我必须修改返回正确的 ExceptionMapper 的 ResteasyProviderFactory。但是我应该更改几个类,因为直接使用内置类 ResteasyProviderFactory