Моя задача состоит в том, чтобы реализовать веб-сервиса, что:Как проверить запрос на XSD и вернуть объект ошибки?
- потребляющий файл XML на конечной POST
- в счастливом потоке, он возвращает DTO как JSON + HTTP 2xx
- входящий файл XML проверяется против XSD; если проверка не удается, JSON со списком всех ошибок проверки возвращается (в том числе линии, колонки, ошибка) с HTTP Неверный запрос
- приложение выставляет две конечные точки, только один из них должен быть валидацию
Я начал реализацию с Spring Boot + web, используя обычный @PostMapping, который «потребляет» и «производит», установленный в application/xml и application/json, соответственно. Обычный поток работает отлично. Теперь я наткнулся на вопрос о проверке входящей полезной нагрузки. Что я выяснил:
1) Я должен проверять полезную нагрузку до того, как она будет преобразована (перенастроена) на объект.
2) После проверки, я должен либо:
- позволяют дальнейшую обработку
- остановить дальнейшую обработку, запись объект ошибки в ответ и установить код статуса 400 Неверный запрос
Мои подходы:
1) использование RequestBodyAdvice, в частности реализация метода beforeBodyRead. У меня была следующая проблема: я не знаю, как писать что-либо на выходе в случае неудачной проверки.
2) с использованием фильтра (я расширил один разPerRequestFilter) - к счастью, я могу прочитать запрос (request.getInputStream()) и написать ответ (response.getOutputStream()).
Однако, как я могу выполнить выборочную фильтрацию (как уже упоминалось, я хочу только проверить одну конечную точку)?
Существуют ли другие альтернативы для размещения проверки XSD входящего запроса? Является ли Spring-web подходящим выбором здесь? Вы порекомендовали бы некоторые другие библиотеки/рамки?
Вы можете добавить перехватчик «прослушивание» на 1 или более дорожках, а затем попытаться проверить тело в этом перехватчике –