是否有可能爲所有意外錯誤生成全局異常處理程序? 因爲它不可能使所有可能的類是這樣的: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 –