Java 根据路径或参数,在2个不同的MarshallingHttpMessageConverter实例之间进行选择

Java 根据路径或参数,在2个不同的MarshallingHttpMessageConverter实例之间进行选择,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,场景: 在SpringMVC控制器(在SpringBoot 1.2.5微服务中)中,我有一个端点,它返回一个JAXBElement,通过配置的MarshallingHttpMessageConverterbean将其编组为XML。这工作得非常好,目前没有对任何模式执行验证——它只是吐出一个域对象的XML表示 问题 我希望能够在每个请求的基础上指定是否应在编组期间执行验证,以便我可以向客户机报告任何问题,但仍然可以选择简单地进行编组而不进行验证。修改底层的Jaxb2Marshaller进行验证没有

场景

在SpringMVC控制器(在SpringBoot 1.2.5微服务中)中,我有一个端点,它返回一个
JAXBElement
,通过配置的
MarshallingHttpMessageConverter
bean将其编组为XML。这工作得非常好,目前没有对任何模式执行验证——它只是吐出一个域对象的XML表示

问题

我希望能够在每个请求的基础上指定是否应在编组期间执行验证,以便我可以向客户机报告任何问题,但仍然可以选择简单地进行编组而不进行验证。修改底层的
Jaxb2Marshaller
进行验证没有问题,我只是用
setSchema
设置了适当的模式,它就可以工作了

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

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

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

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

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