gpt4 book ai didi

java - JAXB : annotation. 引发异常

转载 作者:行者123 更新时间:2023-11-30 08:27:48 25 4
gpt4 key购买 nike

我有一个 REST 服务,可以将一些对象序列化到响应中。我的实体是用 XML 注释的,但 JAXB 引发了 illegalAnnotationExceptions...

这里是实体:

import java.util.List;

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

@XmlRootElement(name = "icns")
public class IcnList {

@XmlElement(required = true)
private List<IcnElement> icns;

public List<IcnElement> getIcns() {
return icns;
}

public void setIcns(List<IcnElement> icns) {
this.icns = icns;
}

}

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "icn")
public class IcnElement {

private String status;

private String revision;

private String icnName;

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public String getRevision() {
return revision;
}

public void setRevision(String revision) {
this.revision = revision;
}

public String getIcnName() {
return icnName;
}

public void setIcnName(String icnName) {
this.icnName = icnName;
}

}

这里是异常(exception):

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
Class has two properties of the same name "icns"
this problem is related to the following location:
at public java.util.List com.xx.model.IcnList.getIcns()
at com.xx.model.IcnList
this problem is related to the following location:
at private java.util.List com.xx.model.IcnList.icns
at com.xx.model.IcnList

有人能告诉我这是什么问题吗?为什么?我做了一些研究,但我完全迷路了......

谢谢。

最佳答案

默认情况下,JAXB 会将公共(public)属性和带注释的字段视为已映射。冲突发生在您的映射中,因为 JAXB 认为您具有以下映射:

  1. 名为 icns 的字段映射到元素 icns
  2. 名为 icns 的属性映射到元素 icns

这会导致您的名字冲突。您可以通过注释属性(get 或 set 方法)来消除冲突:

@XmlRootElement(name = "icns")
public class IcnList {

private List<IcnElement> icns;

@XmlElement(required = true)
public List<IcnElement> getIcns() {
return icns;
}

public void setIcns(List<IcnElement> icns) {
this.icns = icns;
}

}

或者,如果您希望注释该字段,您可以在类级别使用 @XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement(name = "icns")
@XmlAccessorType(XmlAccessType.FIELD)
public class IcnList {

@XmlElement(required = true)
private List<IcnElement> icns;

public List<IcnElement> getIcns() {
return icns;
}

public void setIcns(List<IcnElement> icns) {
this.icns = icns;
}

}

了解更多信息

关于java - JAXB : annotation. 引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20608238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com