Как правильно обрабатывать исключения в REST API, который создает файл Excel или PDF в качестве ответа? - PullRequest
0 голосов
/ 26 ноября 2018

Как мы обрабатываем исключения или ошибки в 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();  
}

1 Ответ

0 голосов
/ 28 ноября 2018

Согласно запросу, мой комментарий как ответ:)

Вот статья об обработке исключений в JaxRS: https://dennis -xlc.gitbooks.io / restful-java-with-jax-rs-2-0-2rd-edition / en / part1 / chapter7 / exception_handling.html

Это означает, что вы должны иметь возможность зарегистрировать пользовательский ExceptionMapper, который обрабатывает ответ для исключений втак, как вам нужно.

...