3

Springs を使用して複数の Rest Web サービスへのアクセスを処理する最良の方法について、誰かが私にアドバイスできますRestTemplateか?

RestTemplateオブジェクトにメッセージ コンバータ参照 ( MarshallingHttpMessageConverter) があり、これが への参照を持っていることはわかっていますunmarshaller。私の場合CastorMarshaller、関連付けられたマッピング ファイルで Spring Frameworks オブジェクトを使用しています。

通常、すべてのマッピングを 1 つの Castor マッピング ファイルに追加するだけで済みます。ただし、私の場合、すべての Web サービスはこの形式 (以下のブロック) であり、呼び出されたサービスに応じて異なるエンティティを保持する < 行 ... /> があります。

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

私が考えてきた可能なオプション:

RestTemplates1 Rest サービスごとに複数作成します。

2 サービスごとに複数作成MessageConvertersし、別のサービスにアクセスする場合は、テンプレートのメッセージ コンバーターを変更します。

3 異なるサービス用に複数のCasterMarshallerオブジェクトを作成し、新しいオブジェクトでメッセージ コンバーターを更新します。unmarshaller

同じルート要素とサブ要素を使用して、このような複数のサービスを処理する最善の方法は何ですか?

よろしくお願いします Sman UK

4

1 に答える 1

0

複数のマッピング ファイルを指定することが問題である場合は、以下が解決策です。

以下に示すように、mappingLocation の代わりに mappingLocations プロパティを使用します。

<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 に答える