2012-12-13 101 views
4

是否有可能为所有意外错误生成全局异常处理程序? 因为它不可能使所有可能的类是这样的:resteasy中的全局自定义异常处理程序

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

我想是这样的:

public class ExceptionHandler implements ExceptionMapper<Exception> 
+0

震惊的是,这不是还存在一个功能... https://issues.jboss.org/browse/RESTEASY-891 –

回答

3

你也许可以做到以下几点:

@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状态码可能并不总是合适的。

+2

这个异常处理程序将覆盖所有默认的RESTEasy异常处理程序(如NotFoundException处理器和多更多)。这并不方便。 –

0

似乎有没有简单的方法来做到这一点。我必须修改ResteasyProviderFactory,它会返回正确的ExceptionMapper。但后来我应该改变对夫妇类,因为有在建一流ResteasyProviderFactory直接利用

8

请注意,尽管接受的答案确实能够捕捉到所有例外情况,但它会导致许多其他问题,例如干扰Resteasy的internal exception handling

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

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

@Provider 
public class DefaultOptionsExceptionHandler implements ExceptionMapper<DefaultOptionsMethodException> { 

    @Override 
    public Response toResponse(DefaultOptionsMethodException e) { 
     return e.getResponse(); 
    } 
}