SpringMVC 中整合JSON、XML视图一

系统 1814 0

SpringMVC中整合了JSON、XML的视图,可以通过这些视图完成Java对象到XML、JSON的转换。转换XML提供了MarshallingView,开发者只需用注入相应的marshaller、和属性配置,即可自动完成Java的Model对象中的数据到XML的编组。

Email:hoojo_@126.com

Blog: http://blog.csdn.net/IBM_hoojo

http://hoojo.cnblogs.com/

一、 准备工作

1、 本次程序会涉及到Jackson、xStream、Jibx、Jaxb2、castor等技术,如果你对这些技术还不是很了解。建议阅读: http://www.cnblogs.com/hoojo/archive/2011/04/27/2030264.html

这篇文章中涉及到的内容应该对你有不少帮助。

2、 jar包下载

spring各版本jar下载地址: http://ebr.springsource.com/repository/app/library/detail?name=org.springframework.spring

相关的依赖包也可以在这里找到: http://ebr.springsource.com/repository/app/library

3、 至少需要以下jar包

SpringMVC 中整合JSON、XML视图一_第1张图片

4、 当前工程的web.xml配置

        
          <?
        
        
          xml
        
        
          version
        
        
          ="1.0"
        
        
          encoding
        
        
          ="UTF-8"
        
        ?
        
          >
        
      
        
          <
        
        
          web-app
        
        
          version
        
        
          ="2.4"
        
      
        
          xmlns
        
        
          ="http://java.sun.com/xml/ns/j2ee"
        
      
        
          xmlns:xsi
        
        
          ="http://www.w3.org/2001/XMLSchema-instance"
        
      
        
          xsi:schemaLocation
        
        
          ="http://java.sun.com/xml/ns/j2ee 
        
      
            http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        
          >
        
      
      
        
          <
        
        
          --
        
        
          配置Spring核心控制器
        
        
          --
        
        
          >
        
      
        
          <
        
        
          servlet
        
        
          >
        
      
        
          <
        
        
          servlet-name
        
        
          >
        
        dispatcher
        
          </
        
        
          servlet-name
        
        
          >
        
      
        
          <
        
        
          servlet-class
        
        
          >
        
        org.springframework.web.servlet.DispatcherServlet
        
          </
        
        
          servlet-class
        
        
          >
        
      
        
          <
        
        
          init-param
        
        
          >
        
      
        
          <
        
        
          param-name
        
        
          >
        
        contextConfigLocation
        
          </
        
        
          param-name
        
        
          >
        
      
        
          <
        
        
          param-value
        
        
          >
        
        /WEB-INF/dispatcher.xml
        
          </
        
        
          param-value
        
        
          >
        
      
        
          </
        
        
          init-param
        
        
          >
        
      
        
          <
        
        
          load-on-startup
        
        
          >
        
        1
        
          </
        
        
          load-on-startup
        
        
          >
        
      
        
          </
        
        
          servlet
        
        
          >
        
      
      
        
          <
        
        
          servlet-mapping
        
        
          >
        
      
        
          <
        
        
          servlet-name
        
        
          >
        
        dispatcher
        
          </
        
        
          servlet-name
        
        
          >
        
      
        
          <
        
        
          url-pattern
        
        
          >
        
        *.do
        
          </
        
        
          url-pattern
        
        
          >
        
      
        
          </
        
        
          servlet-mapping
        
        
          >
        
      
      
        
          <
        
        
          --
        
        
          解决工程编码过滤器
        
        
          --
        
        
          >
        
      
        
          <
        
        
          filter
        
        
          >
        
      
        
          <
        
        
          filter-name
        
        
          >
        
        characterEncodingFilter
        
          </
        
        
          filter-name
        
        
          >
        
      
        
          <
        
        
          filter-class
        
        
          >
        
        org.springframework.web.filter.CharacterEncodingFilter
        
          </
        
        
          filter-class
        
        
          >
        
      
        
          <
        
        
          init-param
        
        
          >
        
      
        
          <
        
        
          param-name
        
        
          >
        
        encoding
        
          </
        
        
          param-name
        
        
          >
        
      
        
          <
        
        
          param-value
        
        
          >
        
        UTF-8
        
          </
        
        
          param-value
        
        
          >
        
      
        
          </
        
        
          init-param
        
        
          >
        
      
        
          </
        
        
          filter
        
        
          >
        
      
      
        
          <
        
        
          filter-mapping
        
        
          >
        
      
        
          <
        
        
          filter-name
        
        
          >
        
        characterEncodingFilter
        
          </
        
        
          filter-name
        
        
          >
        
      
        
          <
        
        
          url-pattern
        
        
          >
        
        /*
        
          </
        
        
          url-pattern
        
        
          >
        
      
        
          </
        
        
          filter-mapping
        
        
          >
        
      
      
        
          <
        
        
          welcome-file-list
        
        
          >
        
      
        
          <
        
        
          welcome-file
        
        
          >
        
        index.jsp
        
          </
        
        
          welcome-file
        
        
          >
        
      
        
          </
        
        
          welcome-file-list
        
        
          >
        
      
        
          </
        
        
          web-app
        
        
          >
        
      

5、 WEB-INF中的dispatcher.xml配置

        
          <?
        
        
          xml
        
        
          version
        
        
          ="1.0"
        
        
          encoding
        
        
          ="UTF-8"
        
        ?
        
          >
        
      
        
          <
        
        
          beans
        
        
          xmlns
        
        
          ="http://www.springframework.org/schema/beans"
        
      
        
          xmlns:mvc
        
        
          ="http://www.springframework.org/schema/mvc"
        
      
        
          xmlns:context
        
        
          ="http://www.springframework.org/schema/context"
        
      
        
          xmlns:util
        
        
          ="http://www.springframework.org/schema/util"
        
      
        
          xmlns:xsi
        
        
          ="http://www.w3.org/2001/XMLSchema-instance"
        
      
        
          xsi:schemaLocation
        
        
          ="http://www.springframework.org/schema/beans 
        
      
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      
            http://www.springframework.org/schema/mvc
      
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
      
            http://www.springframework.org/schema/context 
      
            http://www.springframework.org/schema/context/spring-context-3.0.xsd
      
            http://www.springframework.org/schema/util
      
            http://www.springframework.org/schema/util/spring-util-3.0.xsd"
        
          >
        
      
      
        
          <
        
        
          --
        
        
          注解探测器
        
        
          --
        
        
          >
        
      
        
          <
        
        
          context:component-scan
        
        
          base-package
        
        
          ="com.hoo.controller"
        
        
          />
        
      
      
        
          <
        
        
          --
        
        
          视图解析器
        
          根据视图的名称new
        
        
          ModelAndView
        
        (
        
          name
        
        ),
        
          在配置文件查找对应的bean配置
        
        
          --
        
        
          >
        
      
        
          <
        
        
          bean
        
        
          class
        
        
          ="org.springframework.web.servlet.view.BeanNameViewResolver"
        
        
          >
        
      
        
          <
        
        
          property
        
        
          name
        
        
          ="order"
        
        
          value
        
        
          ="1"
        
        
          />
        
      
        
          </
        
        
          bean
        
        
          >
        
      
      
        
          <
        
        
          bean
        
        
          class
        
        
          ="org.springframework.web.servlet.view.InternalResourceViewResolver"
        
        
          >
        
      
        
          <
        
        
          property
        
        
          name
        
        
          ="viewClass"
        
        
          value
        
        
          ="org.springframework.web.servlet.view.JstlView"
        
        
          />
        
      
        
          </
        
        
          bean
        
        
          >
        
      
        
          </
        
        
          beans
        
        
          >
        
      

启动后,可以看到index.jsp 没有出现异常或错误。那么当前SpringMVC的配置就成功了。

二、 利用 Jaxb2 编组 XML

1、 Jaxb2可以完成XML和Java的相互转换,在WebService中用得较多。前面也介绍过Jaxb2 的用法。

在线博文:

For cnblogs: http://www.cnblogs.com/hoojo/archive/2011/04/26/2029011.html

For csdn: http://blog.csdn.net/IBM_hoojo/archive/2011/04/26/6363491.aspx

2、 首先在dispatcher.xml中配置Jaxb2的marshaller的视图,配置如下:

        
          <
        
        
          --
        
        
          xml视图
        
        ,
        
          Jaxb2Marshaller
        
        ,
        
          需要配置对象和对象添加Annotation
        
        
          xml注解
        
          不需要添加额外的jar包
        
        
          --
        
        
          >
        
      
        
          <
        
        
          bean
        
        
          name
        
        
          ="jaxb2MarshallingView"
        
        
          class
        
        
          ="org.springframework.web.servlet.view.xml.MarshallingView"
        
        
          >
        
      
        
          <
        
        
          constructor-arg
        
        
          >
        
      
        
          <
        
        
          bean
        
        
          class
        
        
          ="org.springframework.oxm.jaxb.Jaxb2Marshaller"
        
        
          >
        
      
        
          <
        
        
          property
        
        
          name
        
        
          ="classesToBeBound"
        
        
          >
        
      
        
          <
        
        
          array
        
        
          >
        
      
        
          <
        
        
          value
        
        
          >
        
        com.hoo.entity.User
        
          </
        
        
          value
        
        
          >
        
      
        
          <
        
        
          value
        
        
          >
        
        com.hoo.entity.AccountBean
        
          </
        
        
          value
        
        
          >
        
      
        
          <
        
        
          value
        
        
          >
        
        com.hoo.entity.MapBean
        
          </
        
        
          value
        
        
          >
        
      
        
          <
        
        
          value
        
        
          >
        
        com.hoo.entity.ListBean
        
          </
        
        
          value
        
        
          >
        
      
        
          </
        
        
          array
        
        
          >
        
      
        
          </
        
        
          property
        
        
          >
        
      
        
          </
        
        
          bean
        
        
          >
        
      
        
          </
        
        
          constructor-arg
        
        
          >
        
      
        
          </
        
        
          bean
        
        
          >
        
      

Jaxb2的jar在jdk中已经包含,所以不需要添加额外的jar包。详细信息你可以参考1中的博文。上面的jaxb2MarshallingView视图的class是MarshallingView,它有一个构造器需要传递一个Marshaller。Marshaller主要完成编组,即将Java对象转换成XML的这么一个东东。我们在这个构造器中注入了Jaxb2Marshaller这个类,这个bean有一个classesToBeBound属性,这个属性是一个数组。需要将即将转换成XML的Java对象配置在这里。而且这些对象需要进行Annotation注解。

3、 创建Jaxb2MarshallingViewController,完成Java对象到XML的转换

单个JavaBean的转换,代码如下:

        
          package
        
         com.hoo.controller;
      
         
      
        
          import
        
         java.util.ArrayList;
      
        
          import
        
         java.util.Date;
      
        
          import
        
         java.util.List;
      
        
          import
        
         org.springframework.stereotype.Controller;
      
        
          import
        
         org.springframework.web.bind.annotation.RequestMapping;
      
        
          import
        
         org.springframework.web.servlet.ModelAndView;
      
        
          import
        
         com.hoo.entity.AccountBean;
      
        
          import
        
         com.hoo.entity.Brithday;
      
        
          import
        
         com.hoo.entity.DifferBean;
      
        
          import
        
         com.hoo.entity.ListBean;
      
        
          import
        
         com.hoo.entity.MoreBean;
      
        
          import
        
         com.hoo.entity.User;
      
         
      
        
          /**
        
      
        
           * <b>function:</b>Jaxb2MarshallingView 视图,利用Jaxb2进行Java对象到XML的转换技术
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-27 下午03:20:23
        
      
        
           * @file Jaxb2MarshallingViewController.java
        
      
        
           * @package com.hoo.controller
        
      
        
           * @project SpringMVC4View
        
      
        
           * @blog http://blog.csdn.net/IBM_hoojo
        
      
        
           * @email hoojo_@126.com
        
      
        
           * @version 1.0
        
      
        
           */
        
      
        @Controller
      
        @RequestMapping(
        
          "/jaxb2/view"
        
        )
      
        
          public
        
        
          class
        
         Jaxb2MarshallingViewController {
      
      
        
          /*
        
      
        
               * MarshallingView Jaxb2Marshaller 需要配置转换成xml的java对象的Annotation
        
      
        
               */
        
      
            @RequestMapping(
        
          "/doXMLJaxb2"
        
        )
      
        
          public
        
         ModelAndView doXMLJaxb2View() {
      
                System.out.println(
        
          "#################ViewController doXMLJaxb2View##################"
        
        );
      
                ModelAndView mav = 
        
          new
        
         ModelAndView(
        
          "jaxb2MarshallingView"
        
        );
      
      
                AccountBean bean = 
        
          new
        
         AccountBean();
      
                bean.setAddress(
        
          "address"
        
        );
      
                bean.setEmail(
        
          "email"
        
        );
      
                bean.setId(1);
      
                bean.setName(
        
          "haha"
        
        );
      
                Brithday day = 
        
          new
        
         Brithday();
      
                day.setBrithday(
        
          "2010-11-22"
        
        );
      
                bean.setBrithday(day);
      
      
                mav.addObject(bean);
      
      
        
          return
        
         mav;
      
            }
      
        }
      

上面的代码的ModelAndView配置了jaxb2MarshallingView这个视图,就表示结果集会通过这个视图进行编组后显示。上面需要转换的AccountBean和Birthday对象,这些对象需要配置annotation, 前面已经讲到annotation对JavaBean转换XML的作用 。我们来看看AccountBean对象代码:

        
          package
        
         com.hoo.entity;
      
         
      
        
          import
        
         javax.xml.bind.annotation.XmlElement;
      
        
          import
        
         javax.xml.bind.annotation.XmlRootElement;
      
         
      
        @XmlRootElement(name = 
        
          "account"
        
        )
      
        
          public
        
        
          class
        
         AccountBean {
      
        
          private
        
        
          int
        
         id;
      
        
          private
        
         String name;
      
        
          private
        
         String email;
      
        
          private
        
         String address;
      
        
          private
        
         Brithday brithday;
      
      
            @XmlElement
      
        
          public
        
         Brithday getBrithday() {
      
        
          return
        
         brithday;
      
            }
      
        
          public
        
        
          void
        
         setBrithday(Brithday brithday) {
      
        
          this
        
        .brithday = brithday;
      
            }
      
      
            @XmlElement
      
        
          public
        
        
          int
        
         getId() {
      
        
          return
        
         id;
      
            }
      
        
          public
        
        
          void
        
         setId(
        
          int
        
         id) {
      
        
          this
        
        .id = id;
      
            }
      
      
            @XmlElement
      
        
          public
        
         String getName() {
      
        
          return
        
         name;
      
            }
      
        
          public
        
        
          void
        
         setName(String name) {
      
        
          this
        
        .name = name;
      
            }
      
      
            @XmlElement
      
        
          public
        
         String getEmail() {
      
        
          return
        
         email;
      
            }
      
        
          public
        
        
          void
        
         setEmail(String email) {
      
        
          this
        
        .email = email;
      
            }
      
      
            @XmlElement
      
        
          public
        
         String getAddress() {
      
        
          return
        
         address;
      
            }
      
        
          public
        
        
          void
        
         setAddress(String address) {
      
        
          this
        
        .address = address;
      
            }
      
      
            @Override
      
        
          public
        
         String toString() {
      
        
          return
        
        
          this
        
        .name + 
        
          "#"
        
         + 
        
          this
        
        .id + 
        
          "#"
        
         + 
        
          this
        
        .address + 
        
          "#"
        
         + 
        
          this
        
        .brithday + 
        
          "#"
        
         + 
        
          this
        
        .email;
      
            }
      
        }
      

在getter方法都有部分注解,如果你想了解更多的jaxb2的相关技术,参考: http://www.cnblogs.com/hoojo/archive/2011/04/26/2029011.html

Brithday

        
          package
        
         com.hoo.entity;
      
         
      
        
          public
        
        
          class
        
         Brithday {
      
        
          private
        
         String brithday;
      
      
        
          public
        
         Brithday() {}
      
      
        
          public
        
         Brithday(String brithday) {
      
        
          this
        
        .brithday = brithday;
      
            }
      
      
        
          public
        
         String getBrithday() {
      
        
          return
        
         brithday;
      
            }
      
         
      
        
          public
        
        
          void
        
         setBrithday(String brithday) {
      
        
          this
        
        .brithday = brithday;
      
            }
      
        }
      

Brithday是AccountBean中的一个属性,在AccountBean中已经注解过。这里就不需要进行注解配置。

通过浏览器请求: http://localhost:8080/SpringMVC4View/jaxb2/view/doXMLJaxb2.do

结果如下:

        
          <?
        
        
          xml
        
        
          version
        
        
          ="1.0"
        
        
          encoding
        
        
          ="UTF-8"
        
        
          standalone
        
        
          ="yes"
        
        ?
        
          >
        
      
        
          <
        
        
          account
        
        
          ><
        
        
          address
        
        
          >
        
        address
        
          </
        
        
          address
        
        
          ><
        
        
          brithday
        
        
          ><
        
        
          brithday
        
        
          >
        
        2010-11-22
        
          </
        
        
          brithday
        
        
          ></
        
        
          brithday
        
        
          >
        
      
        
          <
        
        
          email
        
        
          >
        
        email
        
          </
        
        
          email
        
        
          ><
        
        
          id
        
        
          >
        
        1
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha
        
          </
        
        
          name
        
        
          ></
        
        
          account
        
        
          >
        
      

4、 转换带List属性的JavaEntity

        
          /**
        
      
        
           * <b>function:</b>转换带有List属性的JavaBean
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-27 下午05:32:22
        
      
        
           * @return
        
      
        
           */
        
      
        @RequestMapping(
        
          "/doListXMLJaxb2"
        
        )
      
        
          public
        
         ModelAndView doListXMLJaxb2View() {
      
            System.out.println(
        
          "#################ViewController doListXMLJaxb2View##################"
        
        );
      
            ModelAndView mav = 
        
          new
        
         ModelAndView(
        
          "jaxb2MarshallingView"
        
        );
      
            List<Object> beans = 
        
          new
        
         ArrayList<Object>(); 
      
        
          for
        
         (
        
          int
        
         i = 0; i < 3; i++) {
      
                AccountBean bean = 
        
          new
        
         AccountBean();
      
                bean.setAddress(
        
          "address#"
        
         + i);
      
                bean.setEmail(
        
          "email"
        
         + i + 
        
          "@12"
        
         + i + 
        
          ".com"
        
        );
      
                bean.setId(1 + i);
      
                bean.setName(
        
          "haha#"
        
         + i);
      
                Brithday day = 
        
          new
        
         Brithday();
      
                day.setBrithday(
        
          "2010-11-2"
        
         + i);
      
                bean.setBrithday(day);
      
                beans.add(bean);
      
      
                User user = 
        
          new
        
         User();
      
                user.setAddress(
        
          "china GuangZhou# "
        
         + i);
      
                user.setAge(23 + i);
      
                user.setBrithday(
        
          new
        
         Date());
      
                user.setName(
        
          "jack#"
        
         + i);
      
                user.setSex(Boolean.parseBoolean(i + 
        
          ""
        
        ));
      
                beans.add(user);
      
            }
      
      
            ListBean list = 
        
          new
        
         ListBean();
      
            list.setList(beans);
      
            mav.addObject(list);
      
      
        
          return
        
         mav;
      
        }
      

ListBean注解过的代码

        
          package
        
         com.hoo.entity;
      
         
      
        
          import
        
         java.util.List;
      
        
          import
        
         javax.xml.bind.annotation.XmlElement;
      
        
          import
        
         javax.xml.bind.annotation.XmlElements;
      
        
          import
        
         javax.xml.bind.annotation.XmlRootElement;
      
         
      
        @SuppressWarnings(
        
          "unchecked"
        
        )
      
        @XmlRootElement
      
        
          public
        
        
          class
        
         ListBean {
      
        
          private
        
         String name;
      
        
          private
        
         List list;
      
      
            @XmlElements({
      
                @XmlElement(name = 
        
          "user"
        
        , type = User.
        
          class
        
        ),
      
                @XmlElement(name = 
        
          "account"
        
        , type = AccountBean.
        
          class
        
        ),
      
            })
      
        
          public
        
         List getList() {
      
        
          return
        
         list;
      
            }
      
         
      
        
          public
        
        
          void
        
         setList(List list) {
      
        
          this
        
        .list = list;
      
            }
      
         
      
        
          public
        
         String getName() {
      
        
          return
        
         name;
      
            }
      
         
      
        
          public
        
        
          void
        
         setName(String name) {
      
        
          this
        
        .name = name;
      
            }
      
        }
      

通过上面的注解可以看出List中只能存储User、AccountBean对象,关于User对象的代码和AccountBean对象的是一样的,只是类名不同而已。读者可以自己添加。在WebBrowser中请求: http://localhost:8080/SpringMVC4View/jaxb2/view/doListXMLJaxb2.do

结果如下:

        
          <?
        
        
          xml
        
        
          version
        
        
          ="1.0"
        
        
          encoding
        
        
          ="UTF-8"
        
        
          standalone
        
        
          ="yes"
        
        ?
        
          >
        
      
        
          <
        
        
          listBean
        
        
          >
        
      
        
          <
        
        
          account
        
        
          ><
        
        
          address
        
        
          >
        
        address#0
        
          </
        
        
          address
        
        
          ><
        
        
          brithday
        
        
          ><
        
        
          brithday
        
        
          >
        
        2010-11-20
        
          </
        
        
          brithday
        
        
          ></
        
        
          brithday
        
        
          >
        
      
        
          <
        
        
          email
        
        
          >
        
        email0@120.com
        
          </
        
        
          email
        
        
          ><
        
        
          id
        
        
          >
        
        1
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha#0
        
          </
        
        
          name
        
        
          ></
        
        
          account
        
        
          >
        
      
        
          <
        
        
          user
        
        
          ><
        
        
          address
        
        
          >
        
        china GuangZhou# 0
        
          </
        
        
          address
        
        
          ><
        
        
          age
        
        
          >
        
        23
        
          </
        
        
          age
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2011-04-27T17:02:38.028+08:00
        
          </
        
        
          brithday
        
        
          ><
        
        
          name
        
        
          >
        
        jack#0
        
          </
        
        
          name
        
        
          ><
        
        
          sex
        
        
          >
        
        false
        
          </
        
        
          sex
        
        
          ></
        
        
          user
        
        
          >
        
      
        
          <
        
        
          account
        
        
          ><
        
        
          address
        
        
          >
        
        address#1
        
          </
        
        
          address
        
        
          ><
        
        
          brithday
        
        
          ><
        
        
          brithday
        
        
          >
        
        2010-11-21
        
          </
        
        
          brithday
        
        
          ></
        
        
          brithday
        
        
          >
        
      
        
          <
        
        
          email
        
        
          >
        
        email1@121.com
        
          </
        
        
          email
        
        
          ><
        
        
          id
        
        
          >
        
        2
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha#1
        
          </
        
        
          name
        
        
          ></
        
        
          account
        
        
          >
        
      
        
          <
        
        
          user
        
        
          ><
        
        
          address
        
        
          >
        
        china GuangZhou# 1
        
          </
        
        
          address
        
        
          ><
        
        
          age
        
        
          >
        
        24
        
          </
        
        
          age
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2011-04-27T17:02:38.028+08:00
        
          </
        
        
          brithday
        
        
          ><
        
        
          name
        
        
          >
        
        jack#1
        
          </
        
        
          name
        
        
          ><
        
        
          sex
        
        
          >
        
        false
        
          </
        
        
          sex
        
        
          ></
        
        
          user
        
        
          >
        
      
        
          <
        
        
          account
        
        
          ><
        
        
          address
        
        
          >
        
        address#2
        
          </
        
        
          address
        
        
          ><
        
        
          brithday
        
        
          ><
        
        
          brithday
        
        
          >
        
        2010-11-22
        
          </
        
        
          brithday
        
        
          ></
        
        
          brithday
        
        
          >
        
      
        
          <
        
        
          email
        
        
          >
        
        email2@122.com
        
          </
        
        
          email
        
        
          ><
        
        
          id
        
        
          >
        
        3
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha#2
        
          </
        
        
          name
        
        
          ></
        
        
          account
        
        
          >
        
      
        
          <
        
        
          user
        
        
          ><
        
        
          address
        
        
          >
        
        china GuangZhou# 2
        
          </
        
        
          address
        
        
          ><
        
        
          age
        
        
          >
        
        25
        
          </
        
        
          age
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2011-04-27T17:02:38.028+08:00
        
          </
        
        
          brithday
        
        
          ><
        
        
          name
        
        
          >
        
        jack#2
        
          </
        
        
          name
        
        
          ><
        
        
          sex
        
        
          >
        
        false
        
          </
        
        
          sex
        
        
          ></
        
        
          user
        
        
          >
        
      
        
          </
        
        
          listBean
        
        
          >
        
      

5、 转换带有Map属性的JavaBean,Jaxb2转换Map有点复杂,先看看代码:

        
          /**
        
      
        
           * <b>function:</b>转换带有Map属性的JavaBean
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-27 下午05:32:42
        
      
        
           * @return
        
      
        
           */
        
      
        @RequestMapping(
        
          "/doMapXMLJaxb2"
        
        )
      
        
          public
        
         ModelAndView doMapXMLJaxb2View() {
      
            System.out.println(
        
          "#################ViewController doMapXMLJaxb2View##################"
        
        );
      
            ModelAndView mav = 
        
          new
        
         ModelAndView(
        
          "jaxb2MarshallingView"
        
        );
      
      
            MapBean mapBean = 
        
          new
        
         MapBean();
      
      
            HashMap<String, AccountBean> map = 
        
          new
        
         HashMap<String, AccountBean>();
      
            AccountBean bean = 
        
          new
        
         AccountBean();
      
            bean.setAddress(
        
          "北京"
        
        );
      
            bean.setEmail(
        
          "email"
        
        );
      
            bean.setId(1);
      
            bean.setName(
        
          "jack"
        
        );
      
            Brithday day = 
        
          new
        
         Brithday();
      
            day.setBrithday(
        
          "2010-11-22"
        
        );
      
            bean.setBrithday(day);
      
            map.put(
        
          "NO1"
        
        , bean);
      
      
            bean = 
        
          new
        
         AccountBean();
      
            bean.setAddress(
        
          "china"
        
        );
      
            bean.setEmail(
        
          "tom@125.com"
        
        );
      
            bean.setId(2);
      
            bean.setName(
        
          "tom"
        
        );
      
            day = 
        
          new
        
         Brithday(
        
          "2011-11-22"
        
        );
      
            bean.setBrithday(day);
      
            map.put(
        
          "NO2"
        
        , bean);
      
      
            mapBean.setMap(map);
      
      
            mav.addObject(mapBean);
      
      
        
          return
        
         mav;
      
        }
      

首先看看MapBean的代码,代码很简单就一个Map的属性。

        
          package
        
         com.hoo.entity;
      
         
      
        
          import
        
         java.util.HashMap;
      
        
          import
        
         javax.xml.bind.annotation.XmlRootElement;
      
        
          import
        
         javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
      
        
          import
        
         com.hoo.util.MapAdapter;
      
         
      
        @XmlRootElement
      
        
          public
        
        
          class
        
         MapBean {
      
        
          private
        
         HashMap<String, AccountBean> map;
      
      
            @XmlJavaTypeAdapter(MapAdapter.
        
          class
        
        )
      
        
          public
        
         HashMap<String, AccountBean> getMap() {
      
        
          return
        
         map;
      
            }
      
        
          public
        
        
          void
        
         setMap(HashMap<String, AccountBean> map) {
      
        
          this
        
        .map = map;
      
            }
      
        }
      

上面的代码的getMap方法设置了XmlJavaTypeAdapter这个注解,注解里面的MapAdapter是我们自己实现的,而且还要构建一个MapElements数组元素。主要是继承XmlAdapter重写里面的几个方法完成的。

MapAdapter代码

        
          package
        
         com.hoo.util;
      
         
      
        
          import
        
         java.util.HashMap;
      
        
          import
        
         java.util.Map;
      
        
          import
        
         javax.xml.bind.annotation.adapters.XmlAdapter;
      
        
          import
        
         com.hoo.entity.AccountBean;
      
         
      
        
          /**
        
      
        
           * <b>function:</b>AccountBean 编组、解组的XmlAdapter
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-25 下午05:03:18
        
      
        
           * @file MyAdetper.java
        
      
        
           * @package com.hoo.util
        
      
        
           * @project WebHttpUtils
        
      
        
           * @blog http://blog.csdn.net/IBM_hoojo
        
      
        
           * @email hoojo_@126.com
        
      
        
           * @version 1.0
        
      
        
           */
        
      
        
          public
        
        
          class
        
         MapAdapter 
        
          extends
        
         XmlAdapter<MapElements[], Map<String, AccountBean>> {
      
        
          public
        
         MapElements[] marshal(Map<String, AccountBean> arg0) 
        
          throws
        
         Exception {
      
                MapElements[] mapElements = 
        
          new
        
         MapElements[arg0.size()];
      
         
      
        
          int
        
         i = 0;
      
        
          for
        
         (Map.Entry<String, AccountBean> entry : arg0.entrySet())
      
                    mapElements[i++] = 
        
          new
        
         MapElements(entry.getKey(), entry.getValue());
      
         
      
        
          return
        
         mapElements;
      
            }
      
         
      
        
          public
        
         Map<String, AccountBean> unmarshal(MapElements[] arg0) 
        
          throws
        
         Exception {
      
                Map<String, AccountBean> r = 
        
          new
        
         HashMap<String, AccountBean>();
      
        
          for
        
         (MapElements mapelement : arg0)
      
                    r.put(mapelement.key, mapelement.value);
      
        
          return
        
         r;
      
            }
      
        }
      

MapElements代码

        
          package
        
         com.hoo.util;
      
         
      
        
          import
        
         javax.xml.bind.annotation.XmlElement;
      
        
          import
        
         com.hoo.entity.AccountBean;
      
         
      
        
          /**
        
      
        
           * <b>function:</b> MapElements
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-25 下午05:04:04
        
      
        
           * @file MyElements.java
        
      
        
           * @package com.hoo.util
        
      
        
           * @project WebHttpUtils
        
      
        
           * @blog http://blog.csdn.net/IBM_hoojo
        
      
        
           * @email hoojo_@126.com
        
      
        
           * @version 1.0
        
      
        
           */
        
      
        
          public
        
        
          class
        
         MapElements {
      
            @XmlElement
      
        
          public
        
         String key;
      
      
            @XmlElement
      
        
          public
        
         AccountBean value;
      
         
      
            @SuppressWarnings(
        
          "unused"
        
        )
      
        
          private
        
         MapElements() {
      
            } 
        
          // Required by JAXB
        
      
         
      
        
          public
        
         MapElements(String key, AccountBean value) {
      
        
          this
        
        .key = key;
      
        
          this
        
        .value = value;
      
            }
      
        }
      

在浏览器中请求: http://localhost:8080/SpringMVC4View/jaxb2/view/doMapXMLJaxb2.do

结果如下:

        
          <?
        
        
          xml
        
        
          version
        
        
          ="1.0"
        
        
          encoding
        
        
          ="UTF-8"
        
        
          standalone
        
        
          ="yes"
        
        ?
        
          >
        
      
        
          <
        
        
          mapBean
        
        
          ><
        
        
          map
        
        
          ><
        
        
          item
        
        
          ><
        
        
          key
        
        
          >
        
        NO2
        
          </
        
        
          key
        
        
          ><
        
        
          value
        
        
          ><
        
        
          address
        
        
          >
        
        china
        
          </
        
        
          address
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          ><
        
        
          brithday
        
        
          >
        
        2011-11-22
        
          </
        
        
          brithday
        
        
          ></
        
        
          brithday
        
        
          >
        
      
        
          <
        
        
          email
        
        
          >
        
        tom@125.com
        
          </
        
        
          email
        
        
          ><
        
        
          id
        
        
          >
        
        2
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        tom
        
          </
        
        
          name
        
        
          ></
        
        
          value
        
        
          ></
        
        
          item
        
        
          >
        
      
        
          <
        
        
          item
        
        
          ><
        
        
          key
        
        
          >
        
        NO1
        
          </
        
        
          key
        
        
          ><
        
        
          value
        
        
          ><
        
        
          address
        
        
          >
        
        北京
        
          </
        
        
          address
        
        
          ><
        
        
          brithday
        
        
          ><
        
        
          brithday
        
        
          >
        
        2010-11-22
        
          </
        
        
          brithday
        
        
          ></
        
        
          brithday
        
        
          >
        
      
        
          <
        
        
          email
        
        
          >
        
        email
        
          </
        
        
          email
        
        
          ><
        
        
          id
        
        
          >
        
        1
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        jack
        
          </
        
        
          name
        
        
          ></
        
        
          value
        
        
          ></
        
        
          item
        
        
          ></
        
        
          map
        
        
          >
        
      
        
          </
        
        
          mapBean
        
        
          >
        
      

总结,如果你想将一些Java的基本类型转换成XML。那么你得创建一个带getter、setter方法的JavaBean。然后在Bean的getter方法进行相应的Annotation注解即可完成转换。

 

三、 利用 xStream 转换 XML

1、 xStream可以轻易的将Java对象转换成XML、JSON,Spring整合利用xStream转换xml。需要添加xStream相关的xstream-1.3.1.jar包。 如果你对xStream不上很了解,你可以先阅读这篇文章:

For csblogs: http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html

For csdn: http://blog.csdn.net/IBM_hoojo/archive/2011/04/22/6342386.aspx

2、 然后在dispatcher.xml中添加如下配置

        
          <
        
        
          --
        
        
          xml视图
        
          XStreamMarshaller
        
          可以转换任何形式的java对象
        
          需要添加xStream
        
        
          jar包
        
        
          --
        
        
          >
        
      
        
          <
        
        
          bean
        
        
          name
        
        
          ="xStreamMarshallingView"
        
        
          class
        
        
          ="org.springframework.web.servlet.view.xml.MarshallingView"
        
        
          >
        
      
        
          <
        
        
          property
        
        
          name
        
        
          ="marshaller"
        
        
          >
        
      
        
          <
        
        
          bean
        
        
          class
        
        
          ="org.springframework.oxm.xstream.XStreamMarshaller"
        
        
          >
        
      
        
          <
        
        
          --
        
        
          启用annotation
        
        
          --
        
        
          >
        
      
        
          <
        
        
          property
        
        
          name
        
        
          ="autodetectAnnotations"
        
        
          value
        
        
          ="true"
        
        
          />
        
      
        
          <
        
        
          --
        
        
          类名别名
        
        
          --
        
        
          >
        
      
        
          <
        
        
          property
        
        
          name
        
        
          ="aliases"
        
        
          >
        
      
        
          <
        
        
          map
        
        
          >
        
      
        
          <
        
        
          --
        
        
          Account这个类的别名就变成了myBeans
        
          那么转换后的xml中就是myBeans
        
        
          --
        
        
          >
        
      
        
          <
        
        
          entry
        
        
          key
        
        
          ="myBeans"
        
        
          value
        
        
          ="com.hoo.entity.Account"
        
        
          />
        
      
        
          </
        
        
          map
        
        
          >
        
      
        
          </
        
        
          property
        
        
          >
        
      
        
          <
        
        
          --
        
        
          基本属性别名
        
        
          --
        
        
          >
        
      
        
          <
        
        
          property
        
        
          name
        
        
          ="fieldAliases"
        
        
          >
        
      
        
          <
        
        
          map
        
        
          >
        
      
        
          <
        
        
          --
        
        
          Account中的brithday这个属性
        
        
          --
        
        
          >
        
      
        
          <
        
        
          entry
        
        
          key
        
        
          ="com.hoo.entity.Account.brithday"
        
        
          value
        
        
          ="生日"
        
        
          />
        
      
        
          </
        
        
          map
        
        
          >
        
      
        
          </
        
        
          property
        
        
          >
        
      
        
          </
        
        
          bean
        
        
          >
        
      
        
          </
        
        
          property
        
        
          >
        
      
        
          </
        
        
          bean
        
        
          >
        
      

上次配置的参数有注释描述,还要没有配置的参数。如:annotatedClass、annotatedClasses是当没有配置启用annotation的时候,可以用这2个属性进行配置你指定的class启用annotation注解。streamDriver是配置驱动用的,默认可以不要驱动,你可以配置DomDriver、JSON相关的驱动。encoding是设置编码,关于XStreamMarshaller还要更多的参数配置和上面xStream 的博文中讲解的一样使用,只是通过配置,而博文中是直接在代码中写的。当然也可以通过annotation进行注解哦;如果你想了解更多xStream的用法,请你仔细阅读: http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html

3、 普通JavaBean转换XML

        
          package
        
         com.hoo.controller;
      
         
      
        
          import
        
         java.util.ArrayList;
      
        
          import
        
         java.util.Date;
      
        
          import
        
         java.util.HashMap;
      
        
          import
        
         java.util.List;
      
        
          import
        
         java.util.Map;
      
        
          import
        
         org.springframework.stereotype.Controller;
      
        
          import
        
         org.springframework.web.bind.annotation.RequestMapping;
      
        
          import
        
         org.springframework.web.servlet.ModelAndView;
      
        
          import
        
         com.hoo.entity.Account;
      
        
          import
        
         com.hoo.entity.AccountArray;
      
        
          import
        
         com.hoo.entity.AccountBean;
      
        
          import
        
         com.hoo.entity.Brithday;
      
        
          import
        
         com.hoo.entity.DifferBean;
      
        
          import
        
         com.hoo.entity.ListBean;
      
        
          import
        
         com.hoo.entity.MapBean;
      
        
          import
        
         com.hoo.entity.MoreBean;
      
        
          import
        
         com.hoo.entity.User;
      
         
      
        
          /**
        
      
        
           * <b>function:</b>Jaxb2MarshallingView 视图,利用Jaxb2进行Java对象到XML的转换技术
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-27 下午03:20:23
        
      
        
           * @file Jaxb2MarshallingViewController.java
        
      
        
           * @package com.hoo.controller
        
      
        
           * @project SpringMVC4View
        
      
        
           * @blog http://blog.csdn.net/IBM_hoojo
        
      
        
           * @email hoojo_@126.com
        
      
        
           * @version 1.0
        
      
        
           */
        
      
        @Controller
      
        @RequestMapping(
        
          "/jaxb2/view"
        
        )
      
        
          public
        
        
          class
        
         Jaxb2MarshallingViewController {
      
      
        
          /*
        
      
        
               * MarshallingView Jaxb2Marshaller 需要配置转换成xml的java对象的Annotation
        
      
        
               */
        
      
            @RequestMapping(
        
          "/doXMLJaxb2"
        
        )
      
        
          public
        
         ModelAndView doXMLJaxb2View() {
      
                System.out.println(
        
          "#################ViewController doXMLJaxb2View##################"
        
        );
      
                ModelAndView mav = 
        
          new
        
         ModelAndView(
        
          "jaxb2MarshallingView"
        
        );
      
      
                AccountBean bean = 
        
          new
        
         AccountBean();
      
                bean.setAddress(
        
          "address"
        
        );
      
                bean.setEmail(
        
          "email"
        
        );
      
                bean.setId(1);
      
                bean.setName(
        
          "haha"
        
        );
      
                Brithday day = 
        
          new
        
         Brithday();
      
                day.setBrithday(
        
          "2010-11-22"
        
        );
      
                bean.setBrithday(day);
      
      
                mav.addObject(bean);
      
      
        
          return
        
         mav;
      
            }
      
        }
      

AccountBean上面的代码已经给出,这里就不重复了。值得说明的是xStream在ModelAndView中,直接用addObject方法添加时,有时候出现一些不是我们转换的对象的信息,一般是BindingResult的xml信息。解决办法就是设置addObject的key。Key设置为BindingResult. MODEL_KEY_PREFIX 这样就可以了,代码上面已经给出。

在浏览器中请求: http://localhost:8080/SpringMVC4View/xStream/view/doXMLXStream.do

结果如下:

        
          <
        
        
          com.hoo.entity.AccountBean
        
        
          ><
        
        
          id
        
        
          >
        
        1
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha
        
          </
        
        
          name
        
        
          ><
        
        
          email
        
        
          >
        
        email
        
          </
        
        
          email
        
        
          ><
        
        
          address
        
        
          >
        
        北京
        
          </
        
        
          address
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          ><
        
        
          brithday
        
        
          >
        
        2010-11-22
        
          </
        
        
          brithday
        
        
          ></
        
        
          brithday
        
        
          ></
        
        
          com.hoo.entity.AccountBean
        
        
          >
        
      

4、 转换对象数组

代码如下:

        
          /**
        
      
        
           * <b>function:</b>转换对象数组
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-27 下午06:19:40
        
      
        
           * @return
        
      
        
           */
        
      
        @RequestMapping(
        
          "/doMoreXMLXStream"
        
        )
      
        
          public
        
         ModelAndView doMoreXMLXStreamView() {
      
            System.out.println(
        
          "#################ViewController doMoreXMLXStreamView##################"
        
        );
      
            ModelAndView mav = 
        
          new
        
         ModelAndView(
        
          "xStreamMarshallingView"
        
        );    
      
            Account[] accs = 
        
          new
        
         Account[2];
      
            Account bean = 
        
          new
        
         Account();
      
            bean.setAddress(
        
          "北京"
        
        );
      
            bean.setEmail(
        
          "email"
        
        );
      
            bean.setId(1);
      
            bean.setName(
        
          "haha"
        
        );
      
            Brithday day = 
        
          new
        
         Brithday();
      
            day.setBrithday(
        
          "2010-11-22"
        
        );
      
            bean.setBrithday(day);
      
            accs[0] = bean;
      
      
            bean = 
        
          new
        
         Account();
      
            bean.setAddress(
        
          "上海"
        
        );
      
            bean.setEmail(
        
          "email"
        
        );
      
            bean.setId(1);
      
            bean.setName(
        
          "haha"
        
        );
      
            day = 
        
          new
        
         Brithday();
      
            day.setBrithday(
        
          "2010-11-22"
        
        );
      
            bean.setBrithday(day);
      
            accs[1] = bean;
      
            mav.addObject(accs);
      
        
          return
        
         mav;
      
        }
      

在WebBrowser中请求 http://localhost:8080/SpringMVC4View/xStream/view/doMoreXMLXStream.do

结果如下:

        <myBeans-array><myBeans><id>1</id><name>haha</name><email>email</email>
      
        <address>北京</address><生日><brithday>2010-11-22</brithday></生日></myBeans>
      
        <myBeans><id>1</id><name>haha</name><email>email</email><address>上海</address>
      
        <生日><brithday>2010-11-22</brithday></生日></myBeans></myBeans-array>
      

结果中的myBeans、生日就是在dispatcher配置文件中重命名的对象属性名称。

5、 转换Map集合

        
          /**
        
      
        
           * <b>function:</b>转换Map对象
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-27 下午06:19:48
        
      
        
           * @return
        
      
        
           */
        
      
        @RequestMapping(
        
          "/doDifferXMLXStream"
        
        )
      
        
          public
        
         ModelAndView doDifferXMLXStreamView() {
      
            System.out.println(
        
          "#################ViewController doDifferXMLXStreamView##################"
        
        );
      
            ModelAndView mav = 
        
          new
        
         ModelAndView(
        
          "xStreamMarshallingView"
        
        );
      
      
            Account bean = 
        
          new
        
         Account();
      
            bean.setAddress(
        
          "广东"
        
        );
      
            bean.setEmail(
        
          "email"
        
        );
      
            bean.setId(1);
      
            bean.setName(
        
          "haha"
        
        );
      
            Brithday day = 
        
          new
        
         Brithday();
      
            day.setBrithday(
        
          "2010-11-22"
        
        );
      
            bean.setBrithday(day);
      
      
            User user = 
        
          new
        
         User();
      
            user.setAddress(
        
          "china GuangZhou"
        
        );
      
            user.setAge(23);
      
            user.setBrithday(
        
          new
        
         Date());
      
            user.setName(
        
          "jack"
        
        );
      
            user.setSex(true);
      
      
            Map<String, Object> map = 
        
          new
        
         HashMap<String, Object>();
      
            map.put(
        
          "bean"
        
        , bean);
      
            map.put(
        
          "user"
        
        , user);
      
            mav.addObject(map);
      
        
          return
        
         mav;
      
        }
      

在WebBrowser中请求 http://localhost:8080/SpringMVC4View/xStream/view/doDifferXMLXStream.do

结果如下:

        
          <
        
        
          map
        
        
          ><
        
        
          entry
        
        
          >
        
      
        
          <
        
        
          string
        
        
          >
        
        bean
        
          </
        
        
          string
        
        
          ><
        
        
          myBeans
        
        
          ><
        
        
          id
        
        
          >
        
        1
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha
        
          </
        
        
          name
        
        
          ><
        
        
          email
        
        
          >
        
        email
        
          </
        
        
          email
        
        
          >
        
      
        
          <
        
        
          address
        
        
          >
        
        广东
        
          </
        
        
          address
        
        
          ><
        
        
          生日
        
        
          ><
        
        
          brithday
        
        
          >
        
        2010-11-22
        
          </
        
        
          brithday
        
        
          ></
        
        
          生日
        
        
          ></
        
        
          myBeans
        
        
          >
        
      
        
          </
        
        
          entry
        
        
          ><
        
        
          entry
        
        
          ><
        
        
          string
        
        
          >
        
        user
        
          </
        
        
          string
        
        
          ><
        
        
          com.hoo.entity.User
        
        
          ><
        
        
          name
        
        
          >
        
        jack
        
          </
        
        
          name
        
        
          ><
        
        
          age
        
        
          >
        
        23
        
          </
        
        
          age
        
        
          ><
        
        
          sex
        
        
          >
        
        true
        
          </
        
        
          sex
        
        
          >
        
      
        
          <
        
        
          address
        
        
          >
        
        china GuangZhou
        
          </
        
        
          address
        
        
          ><
        
        
          brithday
        
        
          >
        
        2011-04-27 19:02:13.747 CST
        
          </
        
        
          brithday
        
        
          ></
        
        
          com.hoo.entity.User
        
        
          >
        
      
        
          </
        
        
          entry
        
        
          ></
        
        
          map
        
        
          >
        
      

6、 转换List集合

        
          /**
        
      
        
           * <b>function:</b>转换List对象
        
      
        
           * @author hoojo
        
      
        
           * @createDate 2011-4-27 下午06:20:02
        
      
        
           * @return
        
      
        
           */
        
      
        @RequestMapping(
        
          "/doListXMLXStream"
        
        )
      
        
          public
        
         ModelAndView doListXMLXStreamView() {
      
            System.out.println(
        
          "#################ViewController doListXMLXStreamView##################"
        
        );
      
            ModelAndView mav = 
        
          new
        
         ModelAndView(
        
          "xStreamMarshallingView"
        
        );
      
            List<Object> beans = 
        
          new
        
         ArrayList<Object>(); 
      
        
          for
        
         (
        
          int
        
         i = 0; i < 3; i++) {
      
                Account bean = 
        
          new
        
         Account();
      
                bean.setAddress(
        
          "北京#"
        
         + i);
      
                bean.setEmail(
        
          "email"
        
         + i + 
        
          "@12"
        
         + i + 
        
          ".com"
        
        );
      
                bean.setId(1 + i);
      
                bean.setName(
        
          "haha#"
        
         + i);
      
                Brithday day = 
        
          new
        
         Brithday();
      
                day.setBrithday(
        
          "2010-11-2"
        
         + i);
      
                bean.setBrithday(day);
      
                beans.add(bean);
      
      
                User user = 
        
          new
        
         User();
      
                user.setAddress(
        
          "china GuangZhou 广州# "
        
         + i);
      
                user.setAge(23 + i);
      
                user.setBrithday(
        
          new
        
         Date());
      
                user.setName(
        
          "jack#"
        
         + i);
      
                user.setSex(Boolean.parseBoolean(i + 
        
          ""
        
        ));
      
                beans.add(user);
      
            }
      
      
            mav.addObject(beans);
      
        
          return
        
         mav;
      
        }
      

在WebBrowser中请求 http://localhost:8080/SpringMVC4View/xStream/view/doListXMLXStream.do

结果如下:

        
          <
        
        
          list
        
        
          >
        
      
        
          <
        
        
          myBeans
        
        
          ><
        
        
          id
        
        
          >
        
        1
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha#0
        
          </
        
        
          name
        
        
          ><
        
        
          email
        
        
          >
        
        email0@120.com
        
          </
        
        
          email
        
        
          ><
        
        
          address
        
        
          >
        
        北京#0
        
          </
        
        
          address
        
        
          ><
        
        
          生日
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2010-11-20
        
          </
        
        
          brithday
        
        
          ></
        
        
          生日
        
        
          ></
        
        
          myBeans
        
        
          >
        
      
        
          <
        
        
          com.hoo.entity.User
        
        
          ><
        
        
          name
        
        
          >
        
        jack#0
        
          </
        
        
          name
        
        
          ><
        
        
          age
        
        
          >
        
        23
        
          </
        
        
          age
        
        
          ><
        
        
          sex
        
        
          >
        
        false
        
          </
        
        
          sex
        
        
          ><
        
        
          address
        
        
          >
        
        china GuangZhou 广州# 0
        
          </
        
        
          address
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2011-04-27 19:08:40.106 CST
        
          </
        
        
          brithday
        
        
          ></
        
        
          com.hoo.entity.User
        
        
          >
        
      
        
          <
        
        
          myBeans
        
        
          ><
        
        
          id
        
        
          >
        
        2
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha#1
        
          </
        
        
          name
        
        
          ><
        
        
          email
        
        
          >
        
        email1@121.com
        
          </
        
        
          email
        
        
          ><
        
        
          address
        
        
          >
        
        北京#1
        
          </
        
        
          address
        
        
          ><
        
        
          生日
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2010-11-21
        
          </
        
        
          brithday
        
        
          ></
        
        
          生日
        
        
          ></
        
        
          myBeans
        
        
          >
        
      
        
          <
        
        
          com.hoo.entity.User
        
        
          ><
        
        
          name
        
        
          >
        
        jack#1
        
          </
        
        
          name
        
        
          ><
        
        
          age
        
        
          >
        
        24
        
          </
        
        
          age
        
        
          ><
        
        
          sex
        
        
          >
        
        false
        
          </
        
        
          sex
        
        
          ><
        
        
          address
        
        
          >
        
        china GuangZhou 广州# 1
        
          </
        
        
          address
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2011-04-27 19:08:40.106 CST
        
          </
        
        
          brithday
        
        
          ></
        
        
          com.hoo.entity.User
        
        
          >
        
      
        
          <
        
        
          myBeans
        
        
          ><
        
        
          id
        
        
          >
        
        3
        
          </
        
        
          id
        
        
          ><
        
        
          name
        
        
          >
        
        haha#2
        
          </
        
        
          name
        
        
          ><
        
        
          email
        
        
          >
        
        email2@122.com
        
          </
        
        
          email
        
        
          ><
        
        
          address
        
        
          >
        
        北京#2
        
          </
        
        
          address
        
        
          ><
        
        
          生日
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2010-11-22
        
          </
        
        
          brithday
        
        
          ></
        
        
          生日
        
        
          ></
        
        
          myBeans
        
        
          >
        
      
        
          <
        
        
          com.hoo.entity.User
        
        
          ><
        
        
          name
        
        
          >
        
        jack#2
        
          </
        
        
          name
        
        
          ><
        
        
          age
        
        
          >
        
        25
        
          </
        
        
          age
        
        
          ><
        
        
          sex
        
        
          >
        
        false
        
          </
        
        
          sex
        
        
          ><
        
        
          address
        
        
          >
        
        china GuangZhou 广州# 2
        
          </
        
        
          address
        
        
          >
        
      
        
          <
        
        
          brithday
        
        
          >
        
        2011-04-27 19:08:40.106 CST
        
          </
        
        
          brithday
        
        
          ></
        
        
          com.hoo.entity.User
        
        
          ></
        
        
          list
        
        
          >
        
      

总结,xStream相对jaxb2要简单些。而且相对比较灵活,可以轻易的转换Java普通类型。

 

下次会介绍castor转换XML、jibx转换XML、Jackson转换JSON 以及自定义Jsonlib视图转换Json。

SpringMVC 中整合JSON、XML视图一


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论