我想以某种方式注入Spring-MVC中注册的所有HttpMessageConverter
个实例。我可以通过注册成功注入所有已注册的内容。
private HttpMessageConverter[] converters;
@Autowired
public void setConverters(HttpMessageConverter[] converters) {
this.converters = converters;
}
但是,只有在转换器在上下文中注册时才会注入(即,如果在<annotation-driven>
之外定义)。
我确实想过我会尝试在<beans:ref
中使用<annotation-driven><message-converters>
,但在spring-web 3.1中不支持。
是否有一些我可以注入的类可能具有我可以用来获取转换器的属性?理想情况下,我希望看到过滤器链中的订单也已注册。
答案 0 :(得分:5)
您是对的,消息转换器直接在使用<mvc:annotation-driven/>
xml标记注册的RequestMappingHandlerAdapter中实例化,而消息转换器子标签明确指望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>
答案 1 :(得分:4)
Spring将所有转换器置于org.springframework.core.convert.ConversionService
的实现之后。您需要在该类中注入该接口的实例,您可以在spring documentation中阅读更多内容(包括如何注入它的示例)。
答案 2 :(得分:0)
您可以尝试注入RequestMappingHandlerAdapter
类型的bean,但根据您的配置,您可能没有实例!