Как мы обрабатываем исключения или ошибки в REST API, который создает файл для загрузки?У меня есть API, написанный с использованием Jersey, который создает файл Excel, и он имеет соответствующую аннотацию:
@Produces("application/vnd.ms-excel")
Когда все работает как положено, я создаю ответ с файлом и со статусом Status.OK
.
Однако как правильно построить ответ при возникновении исключения?Каким должен быть заголовок ответа, и будет ли аннотация @Produces вызывать проблему (поскольку в нем упоминается файл Excel, но ответом на ошибку, скорее всего, будет JSON)?
Фрагмент кода для справки:
@GET
@Path("{report}")
@Produces("application/vnd.ms-excel")
public Response generateReport(@PathParam("report") String reportName /* other query params */) {
boolean isValid = false;
File file = null;
try {
/*
Logic to generate the excel file and return info about the generated report
*/
/* Includes code that throws IllegalArgumentException */
} catch(IllegalArgumentException e) {
isValid = false;
status = Status.BAD_REQUEST;
} catch(Exception e) {//Quick and dirty testing for the API
isValid = false;
status = Status.BAD_REQUEST;
}
ResponseBuilder response = null;
if(isValid) {
response = Response.ok((Object) file);
response.header("Content-Disposition","attachment; filename=\"test.xlsx\"");
} else {
response = Response.status(status);
// is this enough, or do we add info in the header here as well?
}
return response.build();
}