我们正在尝试使用Spring MVC构建一些RESTful服务。我们将提供几种表示形式:XML,HTML和& JSON。我们希望使用JiBX作为OXM技术。
我们目前很难弄清楚如何将Spring连接到JiBX。如果我们想要连接一个类,例如Customer
,我们只需定义JibxMarshaller
,XML MarshallingView
,并将其添加到ContentNegotiatingViewResolver
。这很有效。
问题是我们不确定如何连接多个类的编组,例如,Customer
和User
。每个JibxMarshaller
只能支持一个类(与可以支持许多类的Jaxb2Marshaller不同)。我们尝试为每个类声明一个marshaller,但MarshallingView
只支持一个marshaller。声明多个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的答案进行更新:
事实证明,我被targetClass
的{{1}}财产抛弃了。我认为这意味着marshaller只适用于单个类,但是,它似乎只是使用目标类作为查找所有相关绑定的方法。因此,解决方案是使用一个marshaller,使用您绑定的类集中的任意目标类。例如:
JibxMarshaller
答案 0 :(得分:2)
JiBX绑定编译器将JiBX_bindingList
字段添加到类文件中。在运行时,'targetClass'(任何带有JiBX_bindingList
字段的编译类)用于构建BindingFactory。 getMappedClasses()
使用JibxMarshaller
{{1}} {{1}}
在IBindingFactory方法中检查编组人员是否可以编组一个类。
另请参阅supports()。