当前位置:编程学习 > XML/UML >>

SpringMVC 中整合JSON、XML视图二

上篇文章介绍了程序整合的准备工作、结合MarshallingView视图完成jaxb2转换XML、xStream转换XML工作,这次将介绍castor、jibx转换XML。

还有MappingJacksonView用Jackson转换JSON,自己拓展AbstractView定义Jsonlib的视图完成JSON-lib转换JSON。 

四、 用Castor转换XML

1、 castor可以通过一个mapping.xml文件对即将转换的Java对象进行描述,然后可以将Java对象按照描述的情况输出XML内容。利用castor转换xml需要添加如下jar包:

 

如果你还不清楚castor,可以阅读:

for csblogs:http://www.cnblogs.com/hoojo/archive/2011/04/25/2026819.html

for csdn:aspx">http://blog.csdn.net/IBM_hoojo/archive/2011/04/25/6360916.aspx

2、 你需要在dispatcher.xml中添加castor的相关视图,配置如下:

<--
    继承MarshallingView,重写locateToBeMarshalled方法;
         解决对象添加到ModelAndView中,转换后的xml是BindingResult信息的bug
-->
<bean name="castorMarshallingView" class="com.hoo.veiw.xml.OverrideMarshallingView">
    <property name="marshaller">
        <bean class="org.springframework.oxm.castor.CastorMarshaller"> 
            <property name="mappingLocations">
                <array>
                    <value>classpath:mapping.xml</value>
                </array>
            </property>
            <property name="encoding" value="UTF-8"/>
           </bean> 
    </property>
</bean>

mapping.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd">
<mapping>
    <class name="com.hoo.entity.Account" auto-complete="true">  
        <map-to xml="Account"/>
 
        <field name="id" type="integer">
            <bind-xml name="id" node="attribute" />
        </field>
 
        <field name="name" type="string">
            <bind-xml name="name" node="element" />
        </field>
 
        <field name="email" type="string">
            <bind-xml name="email" node="element" />
        </field>
 
        <field name="address" type="string">
            <bind-xml name="address" node="element" />
        </field>
 
        <field name="brithday" type="com.hoo.entity.Brithday">
            <bind-xml name="生日" node="element" />
        </field>
    </class>
 
    <class name="com.hoo.entity.Brithday" auto-complete="true">
        <map-to xml="brithday" />
 
        <field name="brithday" type="string">
            <bind-xml name="brithday" node="attribute" />
        </field>
    </class>
   
    <class name="com.hoo.entity.MapBean" auto-complete="true">
        <field name="map" collection="map">
            <bind-xml name="map">
                <class name="org.exolab.castor.mapping.MapItem">
                    <field name="key" type="java.lang.String">
                        <bind-xml name="key" node="attribute" />
                    </field>
                    <field name="value" type="com.hoo.entity.Account">
                        <bind-xml name="value" auto-naming="deriveByClass"/>
                    </field>
                </class>
            </bind-xml>
        </field>
    </class>
   
    <class name="com.hoo.entity.ListBean" auto-complete="true">
        <map-to xml="listBean"/>
        <field name="list" collection="arraylist" type="com.hoo.entity.Account">
            <bind-xml name="beans" auto-naming="deriveByClass"/>
        </field>
        <field name="name" type="string"/>
    </class>
   
    <class name="com.hoo.entity.AccountArray" auto-complete="true">
        <map-to xml="account-array"/>
        <field name="size" type="int" />
        <field name="accounts" collection="array" type="com.hoo.entity.Account">
            <bind-xml name="accounts" auto-naming="deriveByClass"/>
        </field>
    </class>
</mapping>

关于mapping.xml配置的介绍,你可以参考html">http://www.cnblogs.com/hoojo/archive/2011/04/25/2026819.html

这篇文章的第三栏目。

3、 在使用Spring的MarshallingView的时候,转换的xml结果有时候会带有BindingResult对象的信息。所以解决办法是重写MarshallingView里面的locateToBeMarshalled方法,这样就可以解决了。下面是重新Marsh

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,