是否有可能为所有意外错误生成全局异常处理程序? 因为它不可能使所有可能的类是这样的:resteasy中的全局自定义异常处理程序
public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}
我想是这样的:
public class ExceptionHandler implements ExceptionMapper<Exception>
是否有可能为所有意外错误生成全局异常处理程序? 因为它不可能使所有可能的类是这样的:resteasy中的全局自定义异常处理程序
public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}
我想是这样的:
public class ExceptionHandler implements ExceptionMapper<Exception>
你也许可以做到以下几点:
@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
状态码可能并不总是合适的。
这个异常处理程序将覆盖所有默认的RESTEasy异常处理程序(如NotFoundException处理器和多更多)。这并不方便。 –
似乎有没有简单的方法来做到这一点。我必须修改ResteasyProviderFactory,它会返回正确的ExceptionMapper。但后来我应该改变对夫妇类,因为有在建一流ResteasyProviderFactory直接利用
请注意,尽管接受的答案确实能够捕捉到所有例外情况,但它会导致许多其他问题,例如干扰Resteasy的internal exception handling。
因此,如果您采用这种方法,您还应该为每个对您很重要的方法构建自定义异常映射。
特别是这种方法会破坏内置的CORS处理,所以如果你允许CORS响应,你应该创建一个CORS自定义异常映射器。
@Provider
public class DefaultOptionsExceptionHandler implements ExceptionMapper<DefaultOptionsMethodException> {
@Override
public Response toResponse(DefaultOptionsMethodException e) {
return e.getResponse();
}
}
震惊的是,这不是还存在一个功能... https://issues.jboss.org/browse/RESTEASY-891 –