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配置
Email:hoojo_@126.com
Blog:
一、准备工作
1、本次程序会涉及到Jackson、xStream、Jibx、Jaxb2、castor等技术,如果你对这些技术还不是很了解。建议阅读:
这篇文章中涉及到的内容应该对你有不少帮助。
2、jar包下载
spring各版本jar下载地址:
相关的依赖包也可以在这里找到:
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;@XmlElementpublicBrithdaygetBrithday(){returnbrithday;}publicvoidsetBrithday(Brithdaybrithday){this.brithday=brithday;}@XmlElementpublicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}@XmlElementpublicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}@XmlElementpublicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}@XmlElementpublicStringgetAddress(){returnaddress;}publicvoidsetAddress(Stringaddress){this.address=address;}@OverridepublicStringtoString(){returnthis.name+"#"+this.id+"#"+this.address+"#"+this.brithday+"#"+this.email;}}
在getter方法都有部分注解,如果你想了解更多的jaxb2的相关技术,参考:http://www.cnblogs.com/hoojo/archive/2011/04/26/2029011.html
Brithdaypackagecom.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")@XmlRootElementpublicclassListBean{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;@XmlRootElementpublicclassMapBean{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{@XmlElementpublicStringkey;@XmlElementpublicAccountBeanvalue;@SuppressWarnings("unused")privateMapElements(){}//RequiredbyJAXBpublicMapElements(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转换XMLpackagecom.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。
相关文章推荐
- SpringMVC 中整合JSON、XML视图二
- SpringMVC 中整合JSON、XML视图二
- SpringMVC整合JSON、XML视图
- SpringMVC整合JSON、XML视图
- SpringMVC 中整合JSON、XML视图一
- SpringMVC 中整合JSON、XML视图
- SpringMVC 中整合JSON、XML视图一
- SpringMVC 中整合JSON、XML视图一
- SpringMVC 中整合JSON、XML视图二
- SpringMVC中整合JSON、XML视图二
- SpringMVC整合JSON、XML视图
- SpringMVC整合JSON、XML视图
- SpringMVC整合JSON、XML视图
- SpringMVC 中整合JSON、XML视图二
- SpringMVC 中整合之JSON、XML
- springmvc 视图解析器 原理 返回根据请求返回xml或者json
- SpringMVC:多视图[JSP,JSON,Excel,XML]混合输出__XML配置方式
- springmvc多视图支持--json、xml等
- SpringMVC:多视图[JSP,JSON,Excel,XML]混合输出__Java配置方式
- SpringMVC 产生XML视图和JSON视图