Я пытаюсь добавить новый тип контента в конечную точку 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
, если нет лучшего способа обработки этого.