Может ли контроллер Spring создавать несколько комбинаций типов контента с использованием одной и той же конечной точки? - PullRequest
1 голос
/ 06 августа 2020

Мне нужно обслуживать несколько типов файлов, используя одну и ту же конечную точку (zip, pdf, xml).

Мне нужно было добавить обработку ошибок на эти конечные точки, чтобы в случае ошибки они возвращали json ( используя совет контроллера), чтобы указать пользователю на проблему. Например:

@GetMapping(value = "api/books", produces = {applicaton/zip, application/json}
public ResponseEntity<byte[]> getZipedBooks(){...}
@GetMapping(value = "api/books", produces = {applicaton/pdf, application/json}
public ResponseEntity<byte[]> getPdfBooks()(...}

Без application/json Spring смогла различить эти конечные точки и вызвать правильную на основе заголовка accept. Но когда я добавил json Spring, теперь выдает исключение: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation, даже если из заголовка accept: application/json,application/pdf можно вывести, что getPdfBooks должен вызываться.

Есть ли способ настроить Spring для работы с несколькими типы содержимого на одной конечной точке, или мне нужно создать специальные конечные точки для каждого типа файла?

1 Ответ

0 голосов
/ 06 августа 2020

Я бы пересмотрел этот подход. Если вы хотите вернуть JSON при ошибке, используйте обработку исключений

, чтобы вы добавили что-то вроде

private class ErrorResponse {
    String message;

    public ErrorResponse(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

@ExceptionHandler(value = Exception.class)  
public ResponseEntity<ErrorResponse> handleException(Exception e) {
    return new ResponseEntity<ErrorResponse>(new ErrorResponse(e.getMessage()), HttpStatus.BAD_REQUEST);
}
...