springMVC整合JAXB[通俗易懂]

springMVC整合JAXB

大家好,又见面了,我是全栈君。

一.背景

由于项目中要用到将Java对象转为xml返回给调用者。选择使用JAXB,由于它是JDK自带的。不须要引入其它Jar包

它提供了高速而简便的方法将xml和对象互转的方法。


二.重要Class和Interface:

JAXBContext:应用的入口。用于管理XML/Java绑定信息。
Marshaller:将Java对象序列化为XML数据。
Unmarshaller:将XML数据反序列化为Java对象。
JDK中JAXB相关的重要Annotation:

三.重要的Annotation:
@XmlType,将Java类或枚举类型映射到XML模式类型

@XmlAccessorType  定义映射这个类中的何种类型须要映射到XML。可接收四个參数,各自是:

XmlAccessType.FIELD:映射这个类中的全部字段到XML

XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML

XmlAccessType.PUBLIC_MEMBER:将这个类中的全部publicfieldproperty同一时候映射到XML(默认)

XmlAccessType.NONE:不映射


@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法)。以序列化Java类为XML。

@XmlElementWrapper ,对于数组或集合(即包括多个元素的成员变量)。生成一个包装该数组或集合的XML元素(称为包装器)。

@XmlRootElement。将Java类或枚举类型映射到XML元素。

@XmlElement。将Java类的一个属性映射到与属性同名的一个XML元素。
@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。

四.代码实现:

1. 代码结构图

springMVC整合JAXB[通俗易懂]


springMVC整合JAXB[通俗易懂]


2. spring配置:

<?xml version="1.0" encoding="UTF-8"?

><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 加入注解驱动 --> <mvc:annotation-driven /> <!-- 默认扫描的包路径 --> <context:component-scan base-package="com.zdp" /> <!-- 视图解析器 --> <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> <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.zdp.domain.User</value> <value>com.zdp.domain.ListBean</value> <value>com.zdp.domain.MapBean</value> </array> </property> </bean> </constructor-arg> </bean></beans>


3. UserBean (ListBean及MapBean请在源代码中查看)

@XmlRootElement(name = "user")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class User {
	@XmlAttribute(name = "id")
	public String id;
	
	@XmlAttribute(name = "name")
	public String name;
	
	@XmlAttribute(name = "age")
	public int age;
	
	@XmlAttribute(name = "sex")
	public String sex;
	
	@XmlElement(name = "address")
	public String address;
	
	@XmlElement(name = "Account")
	public Account account;

	public static class Account {
		@XmlAttribute(name = "username")
		public String username;

		@XmlValue
		public String password;

		public Account() {
		}

		public Account(String username, String password) {
			this.username = username;
			this.password = password;
		}
	}
	
	@XmlElement(name = "Cards")
	public Cards cards;
	
	public static class Cards {
		@XmlElement(name = "card")
		public List<String> cards;

		public Cards() {
		}

		public Cards(List<String> cards) {
			this.cards = cards;
		}
	}
	
	public User(){}

}


4. Controller

@Controller
public class JAXBController {
	/**
	 * 将对象转为xml
	 */
	@RequestMapping("/object2xml")
	public ModelAndView object2xml(){
		ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
		User user = new User();
		user.name = "zhangsan";
		user.id = "1";
		user.address = "shenzhen";
		user.age = 20;
		user.sex = "man";
		
		user.account = new Account("zhang", "abc123");
		
		List<String> cards = new ArrayList<String>();
		cards.add("gonghang");
		cards.add("jianhang");
		user.cards = new Cards(cards);
		
		mav.addObject(user);
		return mav;
	}
	
	/**
	 * 将list转为xml
	 */
	@RequestMapping("/list2xml")
	public ModelAndView list2xml(){
		ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
		List<User> userList = new ArrayList<User>();
		for(int i = 0; i < 2; i++){
			User user = new User();
			user.name = "zhangsan" + i;
			user.id = "1";
			user.address = "shenzhen";
			user.age = 20;
			user.sex = "man";
			user.account = new Account("zhang" + i, "abc123");
			List<String> cards = new ArrayList<String>();
			cards.add("gonghang" + i);
			cards.add("jianhang" + i);
			user.cards = new Cards(cards);
			
			userList.add(user);
		}
		
		ListBean listBean = new ListBean();
		listBean.setList(userList);
		mav.addObject(listBean);
		return mav;
	}
	
	
	/**
	 * 将map转为xml
	 */
	@RequestMapping("/map2xml")
	public ModelAndView map2xml(){
		ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
		MapBean mapBean = new MapBean();
	    HashMap<String, User> map = new HashMap<String, User>();
	    
	    for(int i = 0; i < 2; i++){
			User user = new User();
			user.name = "zhangsan" + i;
			user.id = "1";
			user.address = "shenzhen";
			user.age = 20;
			user.sex = "man";
			user.account = new Account("zhang" + i, "abc123");
			List<String> cards = new ArrayList<String>();
			cards.add("gonghang" + i);
			cards.add("jianhang" + i);
			user.cards = new Cards(cards);

			map.put("1", user);
		}
	    
	    mapBean.setMap(map);
	    mav.addObject(mapBean);
		return mav;
	}
}


5. 測试:浏览器输入http://localhost/spring_jaxb/object2xml

<?

xml version="1.0" encoding="UTF-8"?

><user sex="man" age="20" name="zhangsan" id="1"><address>shenzhen</address><Account username="zhang">abc123</Account><Cards><card>gonghang</card><card>jianhang</card></Cards></user>

6. 源代码:http://download.csdn.net/detail/zdp072/8074493

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116670.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JWT单点登录代码实现(Demo详解)

    JWT单点登录代码实现(Demo详解)你好我是辰兮,很高兴你能来阅读,本篇给你介绍JWT单点登录的代码实现,后续会进一步分享源码的学习,献给初学者,共同成长,家一起进步。文章目录一、SSO概念二、JWT单点登录步骤一、SSO概念单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。阿里系的淘宝和天猫,很明显地我们可以知道这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。简述:当你成.

    2022年5月22日
    43
  • phpstorm2021.3激活码 3月最新注册码

    phpstorm2021.3激活码 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    78
  • webstorm占用内存过高_python程序内存不断增加

    webstorm占用内存过高_python程序内存不断增加之前在Mac上用webstorm内存占用非常高,查看资料后通过修改webstorm.vmoptions里的配置,可以降低内存占用,现在用pycharm又遇到这个问题设置前cup占用率查看webstorm/pycharm的占用内存配置文件,打开Finder选择Application应用程序,找到webstorm/pycharm右键,选择显示包内容路径:content/bin…

    2022年8月29日
    5
  • java flowable工作流_flowable工作流免费视频

    java flowable工作流_flowable工作流免费视频1.2基本操作1.2.1编码准备这里一官网请假流程案例为例resources目录下新建一个holiday-request.bpmn20.xml文件1.2.2初始化DB运行脚本后会初始化相关表,后面一点点介绍查看act_re_deployment表查看act_ge_bytearray,记录xml文本字节数组,通过deployment_id关联,查看相关的api有列表查询、分页查询等1.2.4发起流程修改holiday-request.bpmn2

    2025年7月11日
    3
  • (python源码,详细注解 )多目标粒子群算法 mopso

    (python源码,详细注解 )多目标粒子群算法 mopso1本代码功能用多目标粒子群算法(mopso)寻找pareto最优解集2算法介绍2.1简单步骤:(1)初始化群体粒子群的位置和速度,计算适应值(2)根据pareto支配原则,计算得到Archive集(存放当前的非劣解)(3)计算pbest(4)计算Archive集中的拥挤度(5)在Archive集选择gbest(6)更新粒子的速度、位置、适应值(7)更新Archive集(还要注意防止溢出)(…

    2022年5月2日
    71
  • vue集成spreadjs

    vue集成spreadjsvue 集成 spreadjs 先使用 npm 安装 spreadjs 插件然后在页面引用直接上代码效果图先使用 npm 安装 spreadjs 插件 grapecity spread excelio 14 0 10 grapecity spread sheets 14 0 10 grapecity spread sheets barcode 14 0 10 grapecity spread sheets charts 14 0 10 grapecity sp

    2025年9月24日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号