gpt4 book ai didi

java - 有没有办法获取所有已注册的消息转换器?

转载 作者:搜寻专家 更新时间:2023-11-01 01:36:26 25 4
gpt4 key购买 nike

我想以某种方式注入(inject)所有 HttpMessageConverter在 Spring-MVC 中注册的实例。我可以成功注入(inject)所有已注册的。

private HttpMessageConverter[] converters;
@Autowired
public void setConverters(HttpMessageConverter[] converters) {
this.converters = converters;
}

然而,如果转换器在上下文中注册(即如果在 <annotation-driven> 之外定义),这只会注入(inject)。

我确实认为我会尝试使用 <beans:ref<annotation-driven><message-converters>里面但它在 spring-web 3.1 中不受支持。

是否有一些我可以注入(inject)的类可能具有我可以用来获取转换器的属性?理想情况下,我也希望看到它们在其中注册的过滤器链中的顺序。

最佳答案

你是对的,消息转换器直接在使用 <mvc:annotation-driven/> 注册的 RequestMappingHandlerAdapter 中实例化。 xml 标记和 message-converters 子标记明确期望内联定义 bean。

但是,解决方法是定义处理程序适配器并以这种方式注入(inject)转换器:

<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>

关于java - 有没有办法获取所有已注册的消息转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com