Допустит, у нас есть служба остального определяется как:отдых Исключения: Упаковщики против объекта 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.
Является ли один из этих способов предпочтительным? Есть ли недостаток в использовании одного из этих методов для обработки ошибок?