方案:
在Spring MVC控制器中(在SpringBoot 1.2.5微服务中)我有一个端点,它返回一个JAXBElement<?>
,它通过配置的MarshallingHttpMessageConverter
bean编组到XML。这非常好用,目前不对任何模式执行验证 - 它只是吐出一个域对象的XML表示。
问题
我希望能够在每个请求的基础上指定是否应该在编组期间执行验证,因此我可以向客户报告任何问题 - 但仍然可以选择简单地编组而不进行验证。修改基础Jaxb2Marshaller
以进行验证是没有问题的,我只是使用setSchema
设置了适当的架构并且它可以正常工作。
鉴于MarshallingHttpMessageConverter
适用于配置为验证与否的单个编组实例,并且内容协商基于接受标头,如何修改设置以便于选择性每个请求的验证(基于查询参数或路径) - 最好还是依靠Spring的内容协商魔术来做“努力工作”?
答案 0 :(得分:0)
作为一种(希望是临时的)解决方法,我绕过了MarshallingHttpMessageConverter
提供的自动内容协商,而是创建了两个单独的Jaxb2Marshaller
bean,一个验证了,一个没有,并在控制器方法中直接使用它们来编组StringResult
,然后将其作为HttpEntity<String>
返回。需要更多手动步骤,但它可以工作,我可以根据请求参数(或其他)轻松切换验证/不验证。
我不接受这个答案,以防其他人提出更清洁的解决方案。