生活随笔
收集整理的這篇文章主要介紹了
JAXB 有两个名为 ** 的属性,类的两个属性具有相同名称 **解决方案
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? ?用eclipse寫JAXB時(shí),發(fā)現(xiàn)總是報(bào)這樣的錯(cuò)。
? ?
這是為什么呢?
在網(wǎng)上搜索到的jaxb2的中文教程很少,而且內(nèi)容太過(guò)簡(jiǎn)單,查閱了一些英文的資料,發(fā)現(xiàn)問(wèn)題是“名稱的沖突”。
這里說(shuō)的名稱沖突指的是: JavaBean 屬性名稱與字段名稱之間的名稱沖突。
在pojo類中的setter和getter方法會(huì)導(dǎo)致運(yùn)行報(bào)錯(cuò):
Exception in thread “main” com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:
2 counts of IllegalAnnotationExceptions
這時(shí)我們就要用到另一個(gè)注釋:@XmlTransient,用來(lái)防止映射使用@XmlTransient注釋的字段或者javabean的屬性,從而解決名稱沖突。
具體的用法是將@XmlElement和@XmlTransient分別加到j(luò)avabean屬性前和對(duì)應(yīng)的getter方法前:
[java] view plaincopyprint?
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???public?class?Student?implements?Serializable?{??????@XmlElement???????private?String?name;??????@XmlElement???????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;??????}????}??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是一個(gè)跟元素
public class Student implements Serializable {@XmlElement //name作為student的一個(gè)子元素private String name;@XmlElement //gender作為student的一個(gè)子元素private String gender;public Student() {}public Student(String name, String gender) {this.name = name;this.gender = gender;}@XmlTransientpublic String getName() {return name;}@XmlTransientpublic 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?英文不好,此處不作翻譯
總結(jié)
以上是生活随笔為你收集整理的JAXB 有两个名为 ** 的属性,类的两个属性具有相同名称 **解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。