Java 有没有办法获取所有已注册的消息转换器?
我想以某种方式注入SpringMVC中注册的所有Java 有没有办法获取所有已注册的消息转换器?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我想以某种方式注入SpringMVC中注册的所有HttpMessageConverter实例。我可以通过成功注入已注册的所有内容 private HttpMessageConverter[] converters; @Autowired public void setConverters(HttpMessageConverter[] converters) { this.converters = converters; } 但是,只有当转换器在上下文中注册时(即,如果在之外定义),才会
HttpMessageConverter
实例。我可以通过成功注入已注册的所有内容
private HttpMessageConverter[] converters;
@Autowired
public void setConverters(HttpMessageConverter[] converters) {
this.converters = converters;
}
但是,只有当转换器在上下文中注册时(即,如果在
之外定义),才会进行注入
我想我会尝试使用
Spring将所有转换器置于org.springframework.core.convert.ConversionService
的实现之后。您需要将该接口的实例注入到类中,您可以在spring中阅读更多内容(包括如何注入它的示例)。您是对的,消息转换器直接在使用
xml标记注册的RequestMappingHandlerAdapter中实例化,messageconverters子标签明确地期望bean是内联定义的
但是,一种解决方法是定义处理程序适配器,并通过以下方式注入转换器:
<bean name="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer">
<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="conversionService" ref="conversionService"></property>
<property name="validator">
<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
</bean>
</property>
</bean>
</property>
<property name="messageConverters">
<list>
<ref bean="byteArrayConverter"/>
<ref bean="jaxbConverter"/>
<ref bean="jsonConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>
</list>
</property>
</bean>
<bean name="byteArrayConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
<bean name="jaxbConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
<bean name="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
<bean name="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="useSuffixPatternMatch" value="false"></property>
</bean>
您可以尝试注入类型为RequestMappingHandlerAdapter
的bean,但根据您的配置,您可能没有实例 啊,你真是太棒了。RequestMappingHandlerAdapter
的提示告诉了我需要知道的一切。我现在可以@Autowire
一个RequestMappingHandlerAdapter
实例并调用它的getMessageConverters()
方法,这将返回一个数组,该数组似乎按照注册的顺序。FWIW我不想修改它,我只想报告注册了哪些转换器以及它们的顺序。当时,尚未注册所有消息转换器。在我需要使用getMessageConverters()之前,对我有效的方法是调用它。谢谢,这是我根据Biju的回答所做的