Spring 消息转换器
Spring message converters
我已经在我们的应用程序中覆盖了 JsonConvertor 并以下面的方式配置了转换器
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="com.test.iv.converters.JsonConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
但我遇到的问题是一个用例,我们的用例返回字符串(已经使用 gson 转换为 json),方法上带有 @ResponseBody 注释,同样是 Json 转换器被调用,因为媒体类型是应用程序 Json .. 当我没有覆盖这个 StringHttpMessageConverter 时,它被调用因为 StringHttpMessageConverter 早于默认 json 转换器 .. 所以我不得不修复通过如下指定问题
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean class="com.test.iv.converters.JsonConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
但我只是想知道,这种冲突也可能与其他转换器一起出现,所以我想指定 xml 中的所有转换器。你能帮我处理所有默认顺序的转换器吗,这样我就可以将它们注入我的 xml
So i want to specify all the convertors in xml.
你不应该这样做。 register-defaults
参数见spring-mvc
中的XSD:
Whether or not default HttpMessageConverter registrations should be added in addition to the ones provided within this element.
您已明确将此设置为 true
,这意味着您的转换器正在注册 除了 默认转换器。
您可能需要做的是将自定义转换器的 supports()
方法设置为不接受普通 String
对象,这样转换就会失败到默认值 StringHttpMessageConverter
.
无论如何回答你的问题:
在spring 4.1中,默认的消息转换器是:
ByteArrayHttpMessageConverter
、StringHttpMessageConverter
、ResourceHttpMessageConverter
、SourceHttpMessageConverter
和 AllEncompassingFormHttpMessageConverter
。然后,如果合适的库可用:AtomFeedHttpMessageConverter
和 RssChannelHttpMessageConverter
、MappingJackson2XmlHttpMessageConverter
、Jaxb2RootElementHttpMessageConverter
、MappingJackson2HttpMessageConverter
和 GsonHttpMessageConverter
.
这发生在 WebMvcConfigurationSupport
中,特别是 addDefaultHttpMessageConverters
方法 (here on github)。
我已经在我们的应用程序中覆盖了 JsonConvertor 并以下面的方式配置了转换器
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="com.test.iv.converters.JsonConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
但我遇到的问题是一个用例,我们的用例返回字符串(已经使用 gson 转换为 json),方法上带有 @ResponseBody 注释,同样是 Json 转换器被调用,因为媒体类型是应用程序 Json .. 当我没有覆盖这个 StringHttpMessageConverter 时,它被调用因为 StringHttpMessageConverter 早于默认 json 转换器 .. 所以我不得不修复通过如下指定问题
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean class="com.test.iv.converters.JsonConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
但我只是想知道,这种冲突也可能与其他转换器一起出现,所以我想指定 xml 中的所有转换器。你能帮我处理所有默认顺序的转换器吗,这样我就可以将它们注入我的 xml
So i want to specify all the convertors in xml.
你不应该这样做。 register-defaults
参数见spring-mvc
中的XSD:
Whether or not default HttpMessageConverter registrations should be added in addition to the ones provided within this element.
您已明确将此设置为 true
,这意味着您的转换器正在注册 除了 默认转换器。
您可能需要做的是将自定义转换器的 supports()
方法设置为不接受普通 String
对象,这样转换就会失败到默认值 StringHttpMessageConverter
.
无论如何回答你的问题:
在spring 4.1中,默认的消息转换器是:
ByteArrayHttpMessageConverter
、StringHttpMessageConverter
、ResourceHttpMessageConverter
、SourceHttpMessageConverter
和 AllEncompassingFormHttpMessageConverter
。然后,如果合适的库可用:AtomFeedHttpMessageConverter
和 RssChannelHttpMessageConverter
、MappingJackson2XmlHttpMessageConverter
、Jaxb2RootElementHttpMessageConverter
、MappingJackson2HttpMessageConverter
和 GsonHttpMessageConverter
.
这发生在 WebMvcConfigurationSupport
中,特别是 addDefaultHttpMessageConverters
方法 (here on github)。