使用 Spring MVC 和 JIBX 编组不同的类
我们正在尝试使用 Spring MVC 构建一些 RESTful 服务。我们将提供多种表示形式:XML、HTML 和 HTML。 JSON。我们想使用 JiBX 作为 OXM 技术。
我们目前很难弄清楚如何将 Spring 与 JiBX 连接起来。如果我们想要连接单个类,例如 Customer
,我们只需定义一个 JibxMarshaller
、一个 XML MarshallingView
,并将其添加到我们的ContentNegotiatingViewResolver
。这很好用。
问题是我们不确定如何连接多个类的编组,例如 Customer
和 User
。每个 JibxMarshaller 只能支持一个类(与可以支持多个类的 Jaxb2Marshaller 不同)。我们尝试为每个类声明一个编组器,但 MarshallingView
仅支持一个编组器。声明多个 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
属性迷惑了。我认为这意味着编组器只能用于单个类,但是,它似乎只是使用目标类作为查找所有相关绑定的方式。因此,解决方案是仅使用单个编组器,使用您拥有绑定的类集中的任意目标类。例如:
<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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
JiBX 绑定编译器将
JiBX_bindingList
字段添加到类文件中。在运行时,“targetClass”(任何带有JiBX_bindingList
字段的编译类)用于构建 BindingFactory。它是 getMappedClasses() >IBindingFactory 由JibxMarshaller
使用在 supports() 方法来检查编组器是否可以编组类。
另请参阅 JiBX 运行时用法。
JiBX binding compiler adds
JiBX_bindingList
field to class files. At run time, the 'targetClass' (any compiled class withJiBX_bindingList
field) is used to build a BindingFactory. It is thegetMappedClasses()
of IBindingFactory which is used byJibxMarshaller
in supports() method to check if marshaller can marshal a class.
Please also see JiBX runtime usage.