2012-12-13 139 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(); 
    } 
}