2015-07-31 1 views
1

Сценарий:Выбор между 2 различными экземплярами MarshallingHttpMessageConverter на основе пути или параметра

В контроллере Spring MVC (в пределах SpringBoot 1.2.5 microservice) У меня есть конечная точка, которая возвращает JAXBElement<?>, который ранжированы в XML с помощью сконфигурированный бит MarshallingHttpMessageConverter. Это прекрасно работает и в настоящее время не выполняет проверку против каких-либо схем - просто выплескивает XML-представление объекта домена.

Проблема

То, что я хотел бы быть в состоянии сделать на основе каждого запроса указать, должно ли выполняться проверка во время сортировочных, так что я могу сообщить о любых проблемах клиента - но все-таки есть возможность простого маршалла без проверки. Изменение базового Jaxb2Marshaller для проверки не проблема, я просто установил соответствующую схему с setSchema, и она работает.

Учитывая, что MarshallingHttpMessageConverter работает с одним экземпляром ИАС, который либо настроен для проверки или нет, и переговоры контента на основе заголовка принимают, как я могу изменить настройки, чтобы облегчить селективное проверки каждого запроса (на основе параметр запроса или путь) - желательно, в то же время полагаясь на волшебство согласования контента Spring, чтобы выполнить «тяжелую работу»?

ответ

0

В качестве временного временного решения я обошел автосогласование, предоставляемое MarshallingHttpMessageConverter, вместо этого создавая два отдельных компонента Jaxb2Marshaller, один из которых проверяет и тот, который его не использует, и использует их непосредственно в методе контроллера для marshall до StringResult, после чего возвращается это как HttpEntity<String>. Требуется больше ручных действий, но он работает, и я могу легко переключаться между валидацией/не проверкой на основе параметра запроса (или любого другого).

Я не буду принимать этот ответ на всякий случай, если кто-либо придумает более чистое решение.

Смежные вопросы