您的位置:首页 > 编程语言 > Java开发

SpringMVC 中整合JSON、XML视图一

2017-04-18 17:24 435 查看
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包





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

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="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

'target='_blank'>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">[/code]

<--配置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配置

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="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

'target='_blank'>http://www.springframework.org/schema/beans/spring-beans-3.0.xsd[/code]
'target='_blank'>http://www.springframework.org/schema/mvc[/code]
'target='_blank'>http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd[/code]
http://www.springframework.org/schema/context

'target='_blank'>http://www.springframework.org/schema/context/spring-context-3.0.xsd[/code]
'target='_blank'>http://www.springframework.org/schema/util[/code]
'target='_blank'>http://www.springframework.org/schema/util/spring-util-3.0.xsd">[/code]

<--注解探测器-->

<context:component-scanbase-package="com.hoo.controller"/>


<--视图解析器,根据视图的名称newModelAndView(name),在配置文件查找对应的bean配置-->

<beanclass="org.springframework.web.servlet.view.BeanNameViewResolver">

<propertyname="order"value="1"/>

</bean>


<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">

<propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>

</bean>

</beans>


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

二、利用Jaxb2编组XML

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

在线博文:

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

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

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

<--xml视图,Jaxb2Marshaller,需要配置对象和对象添加Annotationxml注解,不需要添加额外的jar包-->

<beanname="jaxb2MarshallingView"class="org.springframework.web.servlet.view.xml.MarshallingView">

<constructor-arg>

<beanclass="org.springframework.oxm.jaxb.Jaxb2Marshaller">

<propertyname="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的转换,代码如下:

packagecom.hoo.controller;


importjava.util.ArrayList;

importjava.util.Date;

importjava.util.List;

importorg.springframework.stereotype.Controller;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.servlet.ModelAndView;

importcom.hoo.entity.AccountBean;

importcom.hoo.entity.Brithday;

importcom.hoo.entity.DifferBean;

importcom.hoo.entity.ListBean;

importcom.hoo.entity.MoreBean;

importcom.hoo.entity.User;


/**

*<b>function:</b>Jaxb2MarshallingView视图,利用Jaxb2进行Java对象到XML的转换技术

*@authorhoojo

*@createDate2011-4-27下午03:20:23

*@fileJaxb2MarshallingViewController.java

*@packagecom.hoo.controller

*@projectSpringMVC4View

*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code]
*@emailhoojo_@126.com

*@version1.0

*/

@Controller

@RequestMapping("/jaxb2/view")

publicclassJaxb2MarshallingViewController{


/*

*MarshallingViewJaxb2Marshaller需要配置转换成xml的java对象的Annotation

*/

@RequestMapping("/doXMLJaxb2")

publicModelAndViewdoXMLJaxb2View(){

System.out.println("#################ViewControllerdoXMLJaxb2View##################");

ModelAndViewmav=newModelAndView("jaxb2MarshallingView");


AccountBeanbean=newAccountBean();

bean.setAddress("address");

bean.setEmail("email");

bean.setId(1);

bean.setName("haha");

Brithdayday=newBrithday();

day.setBrithday("2010-11-22");

bean.setBrithday(day);


mav.addObject(bean);


returnmav;

}

}


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

packagecom.hoo.entity;


importjavax.xml.bind.annotation.XmlElement;

importjavax.xml.bind.annotation.XmlRootElement;


@XmlRootElement(name="account")

publicclassAccountBean{

privateintid;

privateStringname;

privateStringemail;

privateStringaddress;

privateBrithdaybrithday;


@XmlElement

publicBrithdaygetBrithday(){

returnbrithday;

}

publicvoidsetBrithday(Brithdaybrithday){

this.brithday=brithday;

}


@XmlElement

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}


@XmlElement

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}


@XmlElement

publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}


@XmlElement

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}


@Override

publicStringtoString(){

returnthis.name+"#"+this.id+"#"+this.address+"#"+this.brithday+"#"+this.email;

}

}


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

Brithday

packagecom.hoo.entity;


publicclassBrithday{

privateStringbrithday;


publicBrithday(){}


publicBrithday(Stringbrithday){

this.brithday=brithday;

}


publicStringgetBrithday(){

returnbrithday;

}


publicvoidsetBrithday(Stringbrithday){

this.brithday=brithday;

}

}


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

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

结果如下:

<?xmlversion="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

*@authorhoojo

*@createDate2011-4-27下午05:32:22

*@return

*/

@RequestMapping("/doListXMLJaxb2")

publicModelAndViewdoListXMLJaxb2View(){

System.out.println("#################ViewControllerdoListXMLJaxb2View##################");

ModelAndViewmav=newModelAndView("jaxb2MarshallingView");

List<Object>beans=newArrayList<Object>();

for(inti=0;i<3;i++){

AccountBeanbean=newAccountBean();

bean.setAddress("address#"+i);

bean.setEmail("email"+i+"@12"+i+".com");

bean.setId(1+i);

bean.setName("haha#"+i);

Brithdayday=newBrithday();

day.setBrithday("2010-11-2"+i);

bean.setBrithday(day);

beans.add(bean);


Useruser=newUser();

user.setAddress("chinaGuangZhou#"+i);

user.setAge(23+i);

user.setBrithday(newDate());

user.setName("jack#"+i);

user.setSex(Boolean.parseBoolean(i+""));

beans.add(user);

}


ListBeanlist=newListBean();

list.setList(beans);

mav.addObject(list);


returnmav;

}


ListBean注解过的代码

packagecom.hoo.entity;


importjava.util.List;

importjavax.xml.bind.annotation.XmlElement;

importjavax.xml.bind.annotation.XmlElements;

importjavax.xml.bind.annotation.XmlRootElement;


@SuppressWarnings("unchecked")

@XmlRootElement

publicclassListBean{

privateStringname;

privateListlist;


@XmlElements({

@XmlElement(name="user",type=User.class),

@XmlElement(name="account",type=AccountBean.class),

})

publicListgetList(){

returnlist;

}


publicvoidsetList(Listlist){

this.list=list;

}


publicStringgetName(){

returnname;

}


publicvoidsetName(Stringname){

this.name=name;

}

}


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

结果如下:

<?xmlversion="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>chinaGuangZhou#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>chinaGuangZhou#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>chinaGuangZhou#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

*@authorhoojo

*@createDate2011-4-27下午05:32:42

*@return

*/

@RequestMapping("/doMapXMLJaxb2")

publicModelAndViewdoMapXMLJaxb2View(){

System.out.println("#################ViewControllerdoMapXMLJaxb2View##################");

ModelAndViewmav=newModelAndView("jaxb2MarshallingView");


MapBeanmapBean=newMapBean();


HashMap<String,AccountBean>map=newHashMap<String,AccountBean>();

AccountBeanbean=newAccountBean();

bean.setAddress("北京");

bean.setEmail("email");

bean.setId(1);

bean.setName("jack");

Brithdayday=newBrithday();

day.setBrithday("2010-11-22");

bean.setBrithday(day);

map.put("NO1",bean);


bean=newAccountBean();

bean.setAddress("china");

bean.setEmail("tom@125.com");

bean.setId(2);

bean.setName("tom");

day=newBrithday("2011-11-22");

bean.setBrithday(day);

map.put("NO2",bean);


mapBean.setMap(map);


mav.addObject(mapBean);


returnmav;

}


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

packagecom.hoo.entity;


importjava.util.HashMap;

importjavax.xml.bind.annotation.XmlRootElement;

importjavax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

importcom.hoo.util.MapAdapter;


@XmlRootElement

publicclassMapBean{

privateHashMap<String,AccountBean>map;


@XmlJavaTypeAdapter(MapAdapter.class)

publicHashMap<String,AccountBean>getMap(){

returnmap;

}

publicvoidsetMap(HashMap<String,AccountBean>map){

this.map=map;

}

}


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

MapAdapter代码

packagecom.hoo.util;


importjava.util.HashMap;

importjava.util.Map;

importjavax.xml.bind.annotation.adapters.XmlAdapter;

importcom.hoo.entity.AccountBean;


/**

*<b>function:</b>AccountBean编组、解组的XmlAdapter

*@authorhoojo

*@createDate2011-4-25下午05:03:18

*@fileMyAdetper.java

*@packagecom.hoo.util

*@projectWebHttpUtils

*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code]
*@emailhoojo_@126.com

*@version1.0

*/

publicclassMapAdapterextendsXmlAdapter<MapElements[],Map<String,AccountBean>>{

publicMapElements[]marshal(Map<String,AccountBean>arg0)throwsException{

MapElements[]mapElements=newMapElements[arg0.size()];


inti=0;

for(Map.Entry<String,AccountBean>entry:arg0.entrySet())

mapElements[i++]=newMapElements(entry.getKey(),entry.getValue());


returnmapElements;

}


publicMap<String,AccountBean>unmarshal(MapElements[]arg0)throwsException{

Map<String,AccountBean>r=newHashMap<String,AccountBean>();

for(MapElementsmapelement:arg0)

r.put(mapelement.key,mapelement.value);

returnr;

}

}


MapElements代码

packagecom.hoo.util;


importjavax.xml.bind.annotation.XmlElement;

importcom.hoo.entity.AccountBean;


/**

*<b>function:</b>MapElements

*@authorhoojo

*@createDate2011-4-25下午05:04:04

*@fileMyElements.java

*@packagecom.hoo.util

*@projectWebHttpUtils

*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code]
*@emailhoojo_@126.com

*@version1.0

*/

publicclassMapElements{

@XmlElement

publicStringkey;


@XmlElement

publicAccountBeanvalue;


@SuppressWarnings("unused")

privateMapElements(){

}//RequiredbyJAXB


publicMapElements(Stringkey,AccountBeanvalue){

this.key=key;

this.value=value;

}

}


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

结果如下:

<?xmlversion="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不上很了解,你可以先阅读这篇文章:

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

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

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

<--xml视图,XStreamMarshaller,可以转换任何形式的java对象,需要添加xStreamjar包-->

<beanname="xStreamMarshallingView"class="org.springframework.web.servlet.view.xml.MarshallingView">

<propertyname="marshaller">

<beanclass="org.springframework.oxm.xstream.XStreamMarshaller">

<--启用annotation-->

<propertyname="autodetectAnnotations"value="true"/>

<--类名别名-->

<propertyname="aliases">

<map>

<--Account这个类的别名就变成了myBeans,那么转换后的xml中就是myBeans-->

<entrykey="myBeans"value="com.hoo.entity.Account"/>

</map>

</property>

<--基本属性别名-->

<propertyname="fieldAliases">

<map>

<--Account中的brithday这个属性-->

<entrykey="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

packagecom.hoo.controller;


importjava.util.ArrayList;

importjava.util.Date;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importorg.springframework.stereotype.Controller;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.servlet.ModelAndView;

importcom.hoo.entity.Account;

importcom.hoo.entity.AccountArray;

importcom.hoo.entity.AccountBean;

importcom.hoo.entity.Brithday;

importcom.hoo.entity.DifferBean;

importcom.hoo.entity.ListBean;

importcom.hoo.entity.MapBean;

importcom.hoo.entity.MoreBean;

importcom.hoo.entity.User;


/**

*<b>function:</b>Jaxb2MarshallingView视图,利用Jaxb2进行Java对象到XML的转换技术

*@authorhoojo

*@createDate2011-4-27下午03:20:23

*@fileJaxb2MarshallingViewController.java

*@packagecom.hoo.controller

*@projectSpringMVC4View

*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code]
*@emailhoojo_@126.com

*@version1.0

*/

@Controller

@RequestMapping("/jaxb2/view")

publicclassJaxb2MarshallingViewController{


/*

*MarshallingViewJaxb2Marshaller需要配置转换成xml的java对象的Annotation

*/

@RequestMapping("/doXMLJaxb2")

publicModelAndViewdoXMLJaxb2View(){

System.out.println("#################ViewControllerdoXMLJaxb2View##################");

ModelAndViewmav=newModelAndView("jaxb2MarshallingView");


AccountBeanbean=newAccountBean();

bean.setAddress("address");

bean.setEmail("email");

bean.setId(1);

bean.setName("haha");

Brithdayday=newBrithday();

day.setBrithday("2010-11-22");

bean.setBrithday(day);


mav.addObject(bean);


returnmav;

}

}


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>转换对象数组

*@authorhoojo

*@createDate2011-4-27下午06:19:40

*@return

*/

@RequestMapping("/doMoreXMLXStream")

publicModelAndViewdoMoreXMLXStreamView(){

System.out.println("#################ViewControllerdoMoreXMLXStreamView##################");

ModelAndViewmav=newModelAndView("xStreamMarshallingView");

Account[]accs=newAccount[2];

Accountbean=newAccount();

bean.setAddress("北京");

bean.setEmail("email");

bean.setId(1);

bean.setName("haha");

Brithdayday=newBrithday();

day.setBrithday("2010-11-22");

bean.setBrithday(day);

accs[0]=bean;


bean=newAccount();

bean.setAddress("上海");

bean.setEmail("email");

bean.setId(1);

bean.setName("haha");

day=newBrithday();

day.setBrithday("2010-11-22");

bean.setBrithday(day);

accs[1]=bean;

mav.addObject(accs);

returnmav;

}


在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对象

*@authorhoojo

*@createDate2011-4-27下午06:19:48

*@return

*/

@RequestMapping("/doDifferXMLXStream")

publicModelAndViewdoDifferXMLXStreamView(){

System.out.println("#################ViewControllerdoDifferXMLXStreamView##################");

ModelAndViewmav=newModelAndView("xStreamMarshallingView");


Accountbean=newAccount();

bean.setAddress("广东");

bean.setEmail("email");

bean.setId(1);

bean.setName("haha");

Brithdayday=newBrithday();

day.setBrithday("2010-11-22");

bean.setBrithday(day);


Useruser=newUser();

user.setAddress("chinaGuangZhou");

user.setAge(23);

user.setBrithday(newDate());

user.setName("jack");

user.setSex(true);


Map<String,Object>map=newHashMap<String,Object>();

map.put("bean",bean);

map.put("user",user);

mav.addObject(map);

returnmav;

}


在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>chinaGuangZhou</address><brithday>2011-04-2719:02:13.747CST</brithday<
13a43
/span>></com.hoo.entity.User>

</entry></map>


6、转换List集合

/**

*<b>function:</b>转换List对象

*@authorhoojo

*@createDate2011-4-27下午06:20:02

*@return

*/

@RequestMapping("/doListXMLXStream")

publicModelAndViewdoListXMLXStreamView(){

System.out.println("#################ViewControllerdoListXMLXStreamView##################");

ModelAndViewmav=newModelAndView("xStreamMarshallingView");

List<Object>beans=newArrayList<Object>();

for(inti=0;i<3;i++){

Accountbean=newAccount();

bean.setAddress("北京#"+i);

bean.setEmail("email"+i+"@12"+i+".com");

bean.setId(1+i);

bean.setName("haha#"+i);

Brithdayday=newBrithday();

day.setBrithday("2010-11-2"+i);

bean.setBrithday(day);

beans.add(bean);


Useruser=newUser();

user.setAddress("chinaGuangZhou广州#"+i);

user.setAge(23+i);

user.setBrithday(newDate());

user.setName("jack#"+i);

user.setSex(Boolean.parseBoolean(i+""));

beans.add(user);

}


mav.addObject(beans);

returnmav;

}


在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>chinaGuangZhou广州#0</address>

<brithday>2011-04-2719:08:40.106CST</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>chinaGuangZhou广州#1</address>

<brithday>2011-04-2719:08:40.106CST</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>chinaGuangZhou广州#2</address>

<brithday>2011-04-2719:08:40.106CST</brithday></com.hoo.entity.User></list>


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

下次会介绍castor转换XML、jibx转换XML、Jackson转换JSON以及自定义Jsonlib视图转换Json。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: