Как обрабатывать сообщения об ошибках в конечной точке REST, которая принимает различные значения заголовка Accept. - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь добавить новый тип контента в конечную точку REST. В настоящее время он возвращает только JSON, но теперь мне нужно иметь возможность вернуть также файл CSV.

Насколько я знаю, лучший способ сделать это - использовать заголовок Accept со значением text/csv, а затем добавить конвертер, который может реагировать на это, и преобразовать возвращаемое тело в соответствующее * 1005. * представление.

Я смог сделать это, но у меня возникла проблема с обработкой исключений. До тех пор, пока не узнаете, все возвращенные ошибки находятся в json. Интерфейс ожидает, что любой код состояния 500 будет содержать определенное тело с ошибкой. Но теперь, добавив опцию для возврата либо application/json, либо text/csv к моей конечной точке, в случае ошибки преобразователь, который будет использоваться для преобразования тела, будет либо преобразователем jackson, либо моим. в зависимости от пройденного заголовка Accept. Более того, моему веб-интерфейсу понадобится прочитать возвращенный content-type и проанализировать значение на основе типа возвращаемого представления.

Это нормальный подход к решению этой ситуации?

Более быстрый обходной путь - забыть о заголовке Accept и включить параметр url, указывающий ожидаемый формат. Сделав это таким образом, я смогу изменить content-type ответа и синтаксический анализ данных непосредственно в контроллере, так как запрос GET не будет содержать заголовок Accept и он сможет принять что угодно. Некоторые части кода уже делают это, где единственным ожидаемым форматом ответа является CSV, поэтому мне будет сложно защищать использование заголовка Accept, если нет лучшего способа обработки этого.

1 Ответ

0 голосов
/ 05 сентября 2018

моему веб-интерфейсу потребуется прочитать возвращенный тип содержимого и проанализировать значение на основе типа возвращенного представления.

Это нормальный подход к решению этой ситуации?

Да.

Например, RFC 7807 описывает общий формат для описания проблем. Таким образом, сервер отправит application/problem+json или application/problem+xml представление проблемы в ответе вместе с обычными метаданными в заголовках.

Потребители, которые понимают application/problem+json, могут анализировать данные с помощью in и передавать полезное описание проблемы пользователю / журналам. Потребители, которые не понимают, что представление ограничено действием на информацию в заголовках.

Более быстрый обходной путь - забыть о заголовке Accept и включить параметр url, указывающий ожидаемый формат.

Это тоже хорошо - точнее, у вас может быть свой ресурс, отвечающий за каждый из поддерживаемых вами типов носителей.

Может быть полезно просмотреть раздел 3.4 RFC 7231 , в котором описывается семантика согласования контента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...