我有一个Spring MVC控制器,它使用大量配置的Jackson映射器将POST主体从外部服务转换为Java对象。因为这个控制器是一个可嵌入的组件,所以映射器只用于这个特定的数据类型,并且我有一个正确处理转换的HttpMessageConverter。
但是,我在将此转换器连接到Web MVC配置时遇到了问题,因为它不涉及嵌入此控制器的主应用程序的配置。我尝试过WebMvcConfigurerAdapter,但与允许添加自定义格式化程序的addFormatters不同,在configureMessageConverters中添加的任何转换器都会阻止Spring添加默认的转换器集;似乎没有任何类似的register-defaults选项。
在不影响应用程序其余部分转换服务的情况下,外接程序组件注册自己的自定义HttpMessageConverter的最干净方法是什么?
发布于 2014-11-19 02:33:01
这是一个脆弱的解决方案,我欢迎更健壮的替代方案,但我有如下的基本功能:
RequestMappingHandlerAdapter使用的List<HttpMessageConverter<?>>在Spring MVC架构中的其他地方被引用,但不是防御性的复制。获取对bean中的RequestMappingHandlerAdapter的引用并手动调用
rhma.getMessageConverters.add(0, myConverter);工作,但这取决于许多独立组件的内部行为。
发布于 2018-05-17 04:21:01
可以为每个servlet配置HttpMessageConverters。如果将额外的dispatcher servlet添加到web.xml,则可以为该servlet单独配置HttpMessageConverters。
web.xml:
...
<servlet>
<servlet-name>custom</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
...
<servlet-mapping>
<servlet-name>custom</servlet-name>
<url-pattern>/custom/*</url-pattern>
</servlet-mapping>
...custom-servlet.xml:
<beans>
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
<mvc:default-servlet-handler />
<context:component-scan base-package="package.containing.custom.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
</beans>https://stackoverflow.com/questions/27000730
复制相似问题