2017-01-18 14 views
0

Моя задача состоит в том, чтобы реализовать веб-сервиса, что:Как проверить запрос на 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 подходящим выбором здесь? Вы порекомендовали бы некоторые другие библиотеки/рамки?

+0

Вы можете добавить перехватчик «прослушивание» на 1 или более дорожках, а затем попытаться проверить тело в этом перехватчике –

ответ

1

Чтобы проверить xml на схему xsd, я предпочитаю XML Beans. Он очень прост в использовании. Другие варианты: JABX, Castor. Взгляните на Java to XML conversions?.

Вам понадобится использовать jsd schmema, и вам нужно будет поместить его в путь к классам вашего приложения, чтобы его классы были доступны для проверки. Пожалуйста, взгляните на это blog.

Вы можете использовать API для проверки, как упомянуто here.

Я бы предпочел написать код проверки в этом аспекте, чтобы его можно было повторно использовать с другими API.

  • Если проверка не выполнена, выведите исключение из самого аспекта.
  • Если проверка прошла, обработайте введенную строку ввода.

Пожалуйста, сообщите нам, если вам нужна дополнительная информация.