淡然坊

素处以默,妙机其微。

JAXB "有两个名为 "**" 的属性,类的两个属性具有相同名称 "**""解决方案

   用eclipse写JAXB时,发现总是报这样的错。

   

这是为什么呢?

在网上搜索到的jaxb2的中文教程很少,而且内容太过简单,查阅了一些英文的资料,发现问题是“名称的冲突”。
这里说的名称冲突指的是: JavaBean 属性名称与字段名称之间的名称冲突。
在pojo类中的setter和getter方法会导致运行报错:
Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:
2 counts of IllegalAnnotationExceptions
这时我们就要用到另一个注释:@XmlTransient,用来防止映射使用@XmlTransient注释的字段或者javabean的属性,从而解决名称冲突。
具体的用法是将@XmlElement和@XmlTransient分别加到javabean属性前和对应的getter方法前:

package entity;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlRootElement //表示student是一个跟元素
public class Student implements Serializable {
	@XmlElement //name作为student的一个子元素
	private String name;
	@XmlElement //gender作为student的一个子元素
	private String gender;

	public Student() {

	}

	public Student(String name, String gender) {
		this.name = name;
		this.gender = gender;
	}

	@XmlTransient
	public String getName() {
		return name;
	}

	@XmlTransient
	public String getGender() {
		return gender;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

}
可参考 The Great JAXB API Blunder 和 Should JAXB Word With Fields or Properties? 英文不好,此处不作翻译

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huanghanqian/article/details/51549066
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

JAXB "有两个名为 "**" 的属性,类的两个属性具有相同名称 "**""解决方案

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭