比方說,我們有定義REST服務:休息例外:包裝器VS Error對象
@GET
@Produces("application/json")
public Response getAllCategories(@QueryParam(value="startIndex") int startIndex, @QueryParam(value="size") int size)
{
logger.info("[SampleCategoryController][getAllCategories]");
List<YpCategory> categoryList = sampleCategoryService.getAllCategories(startIndex, size);
return Response.ok(categoryList).build();
}
和服務被定義爲:
public class SampleCategoriesServiceImpl {
public List<YpCategory> getAllCategories(int startIndex, int size) {
...
//call some method that throws a runtime exception
...
}
}
和應用異常處理程序:
@Provider
@Component
public class ApplicationExceptionHandler implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Throwable ex) {
String internalError = "There was a problem processing your request.";
return Response.serverError().entity(new ExceptionResponse(500, internalError)).build();
}
}
}
異常響應對象:讓異常冒出來到ApplicationExceptionHandler並返回ExceptionResponse對象。這種方式似乎更清潔,因爲服務不必嘗試處理一個異常,它無法做任何事情,客戶端仍然會收到json響應。
響應包裝:類別對象將擴展某種類型的通用響應包裝對象與有關錯誤代碼的信息,然後我總是必須包裝可以在try/catch塊中引發運行時異常的方法,並設置錯誤代碼和catch塊中的消息信息。
其中一種方法是首選嗎?有沒有利用這些方法來處理錯誤?