Elim的博客

用来记录一些原创性的总结


Elim

JAXB之XmlElement

@XmlElement用来把一个属性与XML的一个元素进行绑定,默认绑定的元素名称是对应的属性名称或者通过get/set方法解析出来的属性名。通常我们的一个对象的属性不加@XmlElement注解,其也会与XML的一个元素绑定,但是使用XmlElement注解后,我们可以通过它来指定绑定元素的名称。

	@Test
	public void test() {
		User user = new User();
		user.setId(1);
		user.setUsername("张三");
		
		JAXB.marshal(user, System.out);
	}
	
	@XmlRootElement
	@XmlAccessorType(XmlAccessType.FIELD)
	public static class User {
		private Integer id;
		@XmlElement(name="name")
		private String username;
		public Integer getId() {
			return id;
		}
		public void setId(Integer id) {
			this.id = id;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
	}

如上示例的配置,User类的id属性会自动的生成XML的id元素,而username属性会自动的生成XML的name元素,因为我们使用了@XmlElement注解,并通过其name属性指定了生成的XML的元素名称为name。所以生成的XML会是如下这样:

<user>
    <id>1</id>
    <name>张三</name>
</user>

如果有需要我们还可以配置namespace属性来指定生成的XML元素关联的namespace。如我们把User在username上指定了namespace属性。

	@XmlRootElement
	@XmlAccessorType(XmlAccessType.FIELD)
	public static class User {
		private Integer id;
		@XmlElement(name="name", namespace="http://jaxb.elim.com")
		private String username;
		public Integer getId() {
			return id;
		}
		public void setId(Integer id) {
			this.id = id;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
	}

然后生成出来的XML中name元素就是由namespace “http://jaxb.elim.com”来关联的。

<user xmlns:ns2="http://jaxb.elim.com">
    <id>1</id>
    <ns2:name>张三</ns2:name>
</user>

除了name和namespace外,@XmlElement也还可以指定其它一些属性,但是其它属性都是与生成schema文件相关的,如有需要请参考API文档。

(注:本文由Elim写于2017年8月10日)