已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringMVC 利用XML、JSON视图SpringMVC中整合了JSON、XML的视图,可以通过这些视图完成Java对象到XML、JSON的转换。转换XML提供了MarshallingView,开发者只需用注入相应的marshaller、和属性配置,即可自动完成Java的Model对象中的数据到XML的编组。Blog:/IBM_hoojo/一、 准备工作1、 本次程序会涉及到Jackson、xStream、Jibx、Jaxb2、castor等技术,如果你对这些技术还不是很了解。建议阅读:/hoojo/archive/2011/04/27/2030264.html这篇文章中涉及到的内容应该对你有不少帮助。2、 jar包下载spring各版本jar下载地址:/repository/app/library/detail?name=org.springframework.spring相关的依赖包也可以在这里找到:/repository/app/library3、 至少需要以下jar包4、 当前工程的web.xml配置dispatcherorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/dispatcher.xml1dispatcher*.docharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8characterEncodingFilter/* index.jsp5、 WEB-INF中的dispatcher.xml配置6、 启动后,可以看到index.jsp 没有出现异常或错误。那么当前SpringMVC的配置就成功了。二、 利用Jaxb2编组XML1、 Jaxb2可以完成XML和Java的相互转换,在WebService中用得较多。前面也介绍过Jaxb2 的用法。在线博文:For cnblogs:/hoojo/archive/2011/04/26/2029011.htmlFor csdn:/IBM_hoojo/archive/2011/04/26/6363491.aspx2、 首先在dispatcher.xml中配置Jaxb2的marshaller的视图,配置如下:com.hoo.entity.Usercom.hoo.entity.AccountBeancom.hoo.entity.MapBeancom.hoo.entity.ListBeanJaxb2的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;/* * function:Jaxb2MarshallingView 视图,利用Jaxb2进行Java对象到XML的转换技术 * author hoojo * createDate 2011-4-27 下午03:20:23 * file Jaxb2MarshallingViewController.java * package com.hoo.controller * project SpringMVC4View * blog /IBM_hoojo * email hoojo_126.com * version 1.0 */ControllerRequestMapping(/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;XmlElementpublic Brithday getBrithday() return brithday;public void setBrithday(Brithday brithday) this.brithday = brithday;XmlElementpublic int getId() return id;public void setId(int id) this.id = id;XmlElementpublic String getName() return name;public void setName(String name) = name;XmlElementpublic String getEmail() return email;public void setEmail(String email) this.email = email;XmlElementpublic String getAddress() return address;public void setAddress(String address) this.address = address;Overridepublic String toString() return + # + this.id + # + this.address + # + this.brithday + # + this.email;在getter方法都有部分注解,如果你想了解更多的jaxb2的相关技术,参考:/hoojo/archive/2011/04/26/2029011.htmlBrithdaypackage 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结果如下:address2010-11-22email1haha4、 转换带List属性的JavaEntity/* * function:转换带有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 beans = new ArrayList(); 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)XmlRootElementpublic 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) = name;通过上面的注解可以看出List中只能存储User、AccountBean对象,关于User对象的代码和AccountBean对象的是一样的,只是类名不同而已。读者可以自己添加。在WebBrowser中请求:http:/localhost:8080/SpringMVC4View/jaxb2/view/doListXMLJaxb2.do结果如下:address#02010-11-201haha#0china GuangZhou# 0232011-04-27T17:02:38.028+08:00jack#0falseaddress#12010-11-212haha#1china GuangZhou# 1242011-04-27T17:02:38.028+08:00jack#1falseaddress#22010-11-223haha#2china GuangZhou# 2252011-04-27T17:02:38.028+08:00jack#2false5、 转换带有Map属性的JavaBean,Jaxb2转换Map有点复杂,先看看代码:/* * function:转换带有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 map = new HashMap();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();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;XmlRootElementpublic class MapBean private HashMap map;XmlJavaTypeAdapter(MapAdapter.class)public HashMap getMap() return map;public void setMap(HashMap 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;/* * function:AccountBean 编组、解组的XmlAdapter * author hoojo * createDate 2011-4-25 下午05:03:18 * file MyAdetper.java * package com.hoo.util * project WebHttpUtils * blog /IBM_hoojo * email hoojo_126.com * version 1.0 */public class MapAdapter extends XmlAdapterMapElements, Map public MapElements marshal(Map arg0) throws Exception MapElements mapElements = new MapElementsarg0.size();int i = 0;for (Map.Entry entry : arg0.entrySet()mapElementsi+ = new MapElements(entry.getKey(), entry.getValue();return mapElements;public Map unmarshal(MapElements arg0) throws Exception Map r = new HashMap();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;/* * function: MapElements * author hoojo * createDate 2011-4-25 下午05:04:04 * file MyElements.java * package com.hoo.util * project WebHttpUtils * blog /IBM_hoojo * email hoojo_126.com * version 1.0 */public class MapElements XmlElementpublic String key;XmlElementpublic AccountBean value;SuppressWarnings(unused)private MapElements() / Required by JAXBpublic MapElements(String key, AccountBean value) this.key = key;this.value = value;在浏览器中请求:http:/localhost:8080/SpringMVC4View/jaxb2/view/doMapXMLJaxb2.do结果如下:NO22tomNO1北京2010-11-22email1jack总结,如果你想将一些Java的基本类型转换成XML。那么你得创建一个带getter、setter方法的JavaBean。然后在Bean的getter方法进行相应的Annotation注解即可完成转换。三、 利用xStream转换XML1、 xStream可以轻易的将Java对象转换成XML、JSON,Spring整合利用xStream转换xml。需要添加xStream相关的xstream-1.3.1.jar包。 如果你对xStream不上很了解,你可以先阅读这篇文章:For csblogs:/hoojo/archive/2011/04/22/2025197.htmlFor csdn:/IBM_hoojo/archive/2011/04/22/6342386.aspx2、 然后在dispatcher.xml中添加如下配置 上次配置的参数有注释描述,还要没有配置的参数。如:annotatedClass、annotatedClasses是当没有配置启用annotation的时候,可以用这2个属性进行配置你指定的class启用annotation注解。streamDriver是配置驱动用的,默认可以不要驱动,你可以配置DomDriver、JSON相关的驱动。encoding是设置编码,关于XStreamMarshaller还要更多的参数配置和上面xStream 的博文中讲解的一样使用,只是通过配置,而博文中是直接在代码中写的。当然也可以通过annotation进行注解哦;如果你想了解更多xStream的用法,请你仔细阅读:/hoojo/archive/2011/04/22/2025197.html3、 普通JavaBean转换XMLpackage 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;/* * function:Jaxb2MarshallingView 视图,利用Jaxb2进行Java对象到XML的转换技术 * author hoojo * createDate 2011-4-27 下午03:20:23 * file Jaxb2MarshallingViewController.java * package com.hoo.controller * project SpringMVC4View * blog /IBM_hoojo * email hoojo_126.com * version 1.0 */ControllerRequestMapping(/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);Bri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 13030.1-2026船舶电力推进系统技术条件第1部分:低压交流
- 2025年中江县卫生健康系统事业单位医疗卫生辅助岗笔试真题
- 2025年济宁市属事业单位招聘笔试真题
- 钦州市钦北区竞争选调城区学校教师考试真题2025
- 供热保障检修应急预案(3篇)
- 办公房租赁合同模板办公空间租赁协议二篇
- 2026年云南(高考)历史真题试卷及参考答案
- 2026年山东小升初(语文)考试真题带答案
- 2026年四川(中考)物理考试试卷及答案
- 2026年青海高职单招(英语)真题试卷附答案
- NB-T+10488-2021水电工程砂石加工系统设计规范
- 江西省南昌市事业单位招聘考试(职业能力倾向测验)题库附解析答案
- 《中电联团体标准-220kV变电站并联直流电源系统技术规范》
- 《水电工程水土保持生态修复技术规范》
- 2023年妇幼健康职业技能竞赛-危重新生儿救治试题及答案
- git使用培训课件
- 树立正确婚恋观 走好幸福军旅路
- 经济法概论(财经类) 自考复习资料 自考
- 直肠及肛管超声诊断
- RB/T 124-2018能源管理体系建筑业施工企业认证要求
- GB/T 4208-2017外壳防护等级(IP代码)
评论
0/150
提交评论