3

任何人都可以建议我使用 Springs 处理对多个 Rest Web 服务的访问的最佳方式RestTemplate吗?

我知道该RestTemplate对象有一个消息转换器引用 ( MarshallingHttpMessageConverter),而后者又引用了一个unmarshaller. 在我的例子中,我使用CastorMarshaller带有关联映射文件的 Spring Frameworks 对象。

通常我可以将我所有的映射添加到一个 Castor 映射文件中。但是,在我的情况下,所有 Web 服务都是这种格式(下面的块),< rows ... /> 根据调用的服务持有不同的实体。

<data>
<output>
    <dataset>
        <row id="" .... />
        <row id="" .... />
        <row id="" .... />
        <row id="" .... />
        <row id="" .... />
    </dataset>
</output>
<nextUpdate><nextUpdate/> 
</data>

CastorMarshaller注入到MessageConverter其中本身被注入到RestTemplate应用程序上下文配置文件中。

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
                <property name="marshaller" ref="castorMarshaller"/>
                <property name="unmarshaller" ref="castorMarshaller"/>
                <property name="supportedMediaTypes">
                    <list>
                        <bean class="org.springframework.http.MediaType">
                            <constructor-arg index="0" value="application"/>
                            <constructor-arg index="1" value="xml"/>
                        </bean>                     
                        <bean class="org.springframework.http.MediaType">
                            <constructor-arg index="0" value="text"/>
                            <constructor-arg index="1" value="xml"/>
                        </bean>     
                    </list>
                </property>

            </bean>

        </list>
    </property>                 
</bean>

<bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller">
    <property name="mappingLocation" value="classpath:oxm-mapping-worldweather.xml"/>
</bean> 

我一直在考虑的可能选项:

1 为每个 Rest 服务创建多个RestTemplates

2 为不同的服务创建多个MessageConverters,并在访问不同的服务时更改模板上的消息转换器。

3 为不同的服务创建多个CasterMarshaller对象并使用新的更新消息转换器unmarshaller

处理具有相同根和子元素的多个服务的最佳方法是什么?

在此先感谢 Sman UK

4

1 回答 1

0

如果指定多个映射文件是问题,那么下面是解决方案。

使用 mappingLocations 属性而不是 mappingLocation,如下所示,

<bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller">
    <property name="mappingLocations">
        <list>
            <value>classpath:oxm-mapping-worldweather.xml</value>
            <value>classpath:sample-mapping.xml</value>
        </list>
    </property>
</bean> 
于 2015-01-05T06:26:20.680 回答