Spring MVC 5 中的默认消息转换器
Default Message Converters in Spring MVC 5
我想了解为什么我的 spring v.5.0.4-RELEASE
无法正确加载默认消息转换器。
我从我的 servlet.xml 中删除了所有声明,我希望找到从 AbstractMessageConverterMethodProcessor
内 spring 正确加载的所有默认转换器,但我只得到以下 4:
org.springframework.http.converter.ByteArrayHttpMessageConverter@35ca138b
org.springframework.http.converter.StringHttpMessageConverter@2b755f0d
org.springframework.http.converter.xml.SourceHttpMessageConverter@74f5d717
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@6982b849
有什么线索吗?
我最终了解到问题是由 RequestMappingHandlerAdapter
bean
引起的
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
这覆盖了 Spring 默认值并发布了我问题中列出的四个转换器。
解决方案是将我正在寻找的转换器放在 bean 下,如下所示:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean
class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="autoDetectFields" value="true" />
<property name="autoDetectGettersSetters" value="false" />
<property name="objectMapper">
<bean class="com.mypackage.CustomMapper" />
</property>
</bean>
</property>
</bean>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
annotation-driven
下的配置被完全忽略:
<mvc:annotation-driven>
<mvc:message-converters>
...
</mvc:message-converters>
</mvc:annotation-driven>
我想了解为什么我的 spring v.5.0.4-RELEASE
无法正确加载默认消息转换器。
我从我的 servlet.xml 中删除了所有声明,我希望找到从 AbstractMessageConverterMethodProcessor
内 spring 正确加载的所有默认转换器,但我只得到以下 4:
org.springframework.http.converter.ByteArrayHttpMessageConverter@35ca138b
org.springframework.http.converter.StringHttpMessageConverter@2b755f0d
org.springframework.http.converter.xml.SourceHttpMessageConverter@74f5d717
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@6982b849
有什么线索吗?
我最终了解到问题是由 RequestMappingHandlerAdapter
bean
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
这覆盖了 Spring 默认值并发布了我问题中列出的四个转换器。 解决方案是将我正在寻找的转换器放在 bean 下,如下所示:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean
class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="autoDetectFields" value="true" />
<property name="autoDetectGettersSetters" value="false" />
<property name="objectMapper">
<bean class="com.mypackage.CustomMapper" />
</property>
</bean>
</property>
</bean>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
annotation-driven
下的配置被完全忽略:
<mvc:annotation-driven>
<mvc:message-converters>
...
</mvc:message-converters>
</mvc:annotation-driven>