gpt4 book ai didi

web-services - 使用 Spring 和 Castor 处理多个 Rest Web 服务

转载 作者:行者123 更新时间:2023-12-04 05:13:35 25 4
gpt4 key购买 nike

谁能告诉我使用 Springs RestTemplate 处理对多个 Rest web 服务的访问的最佳方式?

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

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

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

CastorMarshaller 被注入(inject)到 MessageConverter 中,后者本身被注入(inject)到应用程序上下文配置文件中的 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 更新消息转换器

使用相同的根元素和子元素来处理像这样的多个服务的最佳方法是什么?

提前致谢英国斯曼

最佳答案

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

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

关于web-services - 使用 Spring 和 Castor 处理多个 Rest Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13781252/

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