使用Spring MVC和JIBX编组不同的类

时间:2011-01-28 00:38:59

标签: java spring spring-mvc jibx spring-oxm

我们正在尝试使用Spring MVC构建一些RESTful服务。我们将提供几种表示形式:XML,HTML和& JSON。我们希望使用JiBX作为OXM技术。

我们目前很难弄清楚如何将Spring连接到JiBX。如果我们想要连接一个类,例如Customer,我们只需定义JibxMarshaller,XML MarshallingView,并将其添加到ContentNegotiatingViewResolver。这很有效。

问题是我们不确定如何连接多个类的编组,例如,CustomerUser。每个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

1 个答案:

答案 0 :(得分:2)

JiBX绑定编译器将JiBX_bindingList字段添加到类文件中。在运行时,'targetClass'(任何带有JiBX_bindingList字段的编译类)用于构建BindingFactory。 getMappedClasses()使用JibxMarshaller {{1}} {{1}} 在IBindingFactory方法中检查编组人员是否可以编组一个类。

另请参阅supports()