任何人都可以建议我使用 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