MarshallingHttpMessageConverter

MarshallingHttpMessageConverter

场景:

在Spring MVC控制器(在SpringBoot 1.2.5微服务中)中,我有一个端点,该端点返回JAXBElement<?>,该MarshallingHttpMessageConverter通过已配置的Jaxb2Marshaller bean编组为XML。这工作得很好,并且当前不针对任何模式执行验证-它只是散发出域对象的XML表示形式。

问题

我希望根据每个请求执行的操作是指定是否在编组期间执行验证,以便我可以向客户端报告任何问题-但仍然可以选择不进行验证就简单地编组。修改底层的setSchema进行验证是没有问题的,我只需使用MarshallingHttpMessageConverter设置适当的架构即可。

鉴于与配置为验证或不验证的单个marshaller实例一起使用,并且内容协商基于accept标头,我如何修改设置以便于对每个请求进行选择性验证(基于查询参数或路径) )-最好还是仍然依靠Spring的内容协商魔术来完成“艰苦的工作”?

最佳答案

作为一种(希望是临时的)解决方法,我绕过了MarshallingHttpMessageConverter提供的自动内容协商,而是创建了两个单独的Jaxb2Marshaller bean,一个用于验证而另一个未验证,并且直接在controller方法中使用它们来编组到StringResult,然后将其作为HttpEntity<String>返回。需要更多的手动步骤,但是它可以工作,我可以根据请求参数(或其他参数)在验证/不验证之间轻松切换。

我不会接受这个答案,以防万一其他人想出一个更干净的解决方案。

10-05 22:01