Spring MVCでいくつかのRESTfulサービスを構築しようとしています。 XML、HTML、& JSONという表現をいくつか提供します。 OXM技術としてJiBXを使用したいと考えています。Spring MVCとJIBXで異なるクラスをマーシャリングする
現在、SpringをJiBXに接続する方法を理解することができません。たとえば、Customer
のように1つのクラスを結び付けたい場合は、JibxMarshaller
とXML MarshallingView
を定義し、それにContentNegotiatingViewResolver
を追加するだけです。これは素晴らしいです。
問題は複数のクラスのマーシャリングを結ぶ方法がわからないことです。たとえば、Customer
とUser
です。各JibxMarshaller
は、1つのクラスのみをサポートできます(多くをサポートできるJaxb2Marshallerとは異なります)。各クラスのマーシャラーを宣言しようとしましたが、MarshallingView
は1つのマーシャラーしかサポートしていません。複数のMarshallingView
が宣言されていません(最初のものだけが表示されます)。
あなたのアドバイスは高く評価されます。ありがとう。
<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の回答に基づいて更新:
それは私がJibxMarshaller
のtargetClass
プロパティではオフにスローされたことが判明しました。私はそれがマーシャラーが単一のクラスのためだけに働くということを意味していると思ったが、関連するすべてのバインディングを見つける方法としてターゲットクラスを使用するように見える。そのため、解決策は、バインディングを持つクラスセットから任意のターゲットクラスを使用して、ただ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>
私は最終的にこれを数週間後に再調査し、さらに調査したところ、あなたが正しいと思われます。自分の誤解は、マーシャルの「targetClass 」プロパティだと思います。私にとって、このプロパティは、マーシャラーがターゲットクラスに対してのみ機能することを意味しますが、これは真実ではありません。 – SingleShot
元の質問に私のソリューションを追加しました。ご協力いただきありがとうございます! – SingleShot
私はこの全く同じ問題を抱えていますが、任意のクラスを持つ単一のjibx marshlerには私の問題を解決していません。私がすべきことは他にありますか? – Richie