Spring MVC でいくつかの RESTful サービスを構築しようとしています。XML、HTML、および JSON など、いくつかの表現を提供します。OXM テクノロジーとして JiBX を使用したいと考えています。
現在、JiBX で Spring を接続する方法を理解するのに苦労しています。たとえば、単一のクラスを結び付けたい場合は、単にXMLCustomer
を定義し、それを .xml に追加するだけです。これはうまくいきます。JibxMarshaller
MarshallingView
ContentNegotiatingViewResolver
問題は、複数のクラスのマーシャリングを接続する方法がわからないことです。たとえばCustomer
とUser
. それぞれJibxMarshaller
が 1 つのクラスしかサポートできません (多数をサポートできる Jaxb2Marshaller とは異なります)。クラスごとにマーシャラーを宣言しようとしましたが、MarshallingView
1 つのマーシャラーしかサポートしていません。複数の s を宣言MarshallingView
しても機能しません (最初の 1 つだけが機能するようです)。
あなたのアドバイスをいただければ幸いです。ありがとう。
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<util:map>
<entry key="xml" value="application/xml"/>
</util:map>
</property>
<property name="defaultViews">
<util:list>
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller" ref="userMarshaller"/>
</bean>
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller" ref="customerMarshaller"/>
</bean>
</util:list>
</property>
</bean>
<bean id="userMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
<property name="targetClass" value="com.mycompany.User"/>
</bean>
<bean id="customerMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
<property name="targetClass" value="com.mycompany.Customer"/>
</bean>
以下のRiteshの回答に基づいて更新します。
targetClass
の所有物に私が振り落とされたことが判明しましたJibxMarshaller
。マーシャラーが単一のクラスに対してのみ機能することを意味すると思いましたが、関連するすべてのバインディングを見つける方法としてターゲット クラスを使用しているようです。したがって、解決策は、バインドしている一連のクラスから任意のターゲット クラスを使用して、1 つのマーシャラーのみを使用することです。例えば:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<util:map>
<entry key="xml" value="application/xml"/>
</util:map>
</property>
<property name="defaultViews">
<util:list>
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller" ref="jibxMarshaller"/>
</bean>
</util:list>
</property>
</bean>
<bean id="jibxMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
<property name="targetClass" value="com.mycompany.User"/>
</bean>