Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法获取所有已注册的消息转换器?_Java_Spring_Spring Mvc - Fatal编程技术网

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

Java 有没有办法获取所有已注册的消息转换器?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我想以某种方式注入SpringMVC中注册的所有HttpMessageConverter实例。我可以通过成功注入已注册的所有内容 private HttpMessageConverter[] converters; @Autowired public void setConverters(HttpMessageConverter[] converters) { this.converters = converters; } 但是,只有当转换器在上下文中注册时(即,如果在之外定义),才会

我想以某种方式注入SpringMVC中注册的所有
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的回答所做的