Java 列表的右注释<;字符串>;JAXB

Java 列表的右注释<;字符串>;JAXB,java,list,jaxb,annotations,Java,List,Jaxb,Annotations,我搜索了很多问题,发现了很多相似的问题,但我无法解决 我希望使用JAXB将一个简单对象转换为XML 我的问题是我有一个arrayList作为我的属性之一,我就是找不到合适的注释 @XmlRootElement(name = "fighter") public class fighter{ private int health; private int energy; private String name; private List<String> abilities; } @Xm

我搜索了很多问题,发现了很多相似的问题,但我无法解决

我希望使用JAXB将一个简单对象转换为XML

我的问题是我有一个arrayList作为我的属性之一,我就是找不到合适的注释

@XmlRootElement(name = "fighter")
public class fighter{
private int health;
private int energy;
private String name;
private List<String> abilities;
}
@XmlRootElement(name=“fighter”)
公共级战斗机{
私人卫生;
私人能源;
私有字符串名称;
私人列表能力;
}
如果我删除了Capabilities属性,我可以封送\unmarshall这个类

但是,当我尝试使用“能力”属性时,它会告诉我有非法的注释

@XmlElementWrapper(name = "abilitiesList")
@XmlElement(name = "ability")
public List<String> getAbilities(){
return abilities
}
@xmlementwrapper(name=“abilitiesList”)
@xmlement(name=“ability”)
公共列表getAbilities(){
返回能力
}
我试过各种注释,但我就是不知道有什么问题

感谢您的帮助

试试这个:

@XmlRootElement(name = "fighter")
@XmlAccessorType(XmlAccessType.FIELD)
public class Fighter{

    @XmlElement
    private int health;

    @XmlElement
    private int energy;

    @XmlElement
    private String name;

    @XmlElementWrapper(name = "abilitiesList")
    @XmlElement(name = "ability")
    private List<String> abilities;
}
@XmlRootElement(name=“fighter”)
@XmlAccessorType(XmlAccessType.FIELD)
公共级战斗机{
@XmlElement
私人卫生;
@XmlElement
私人能源;
@XmlElement
私有字符串名称;
@xmlementwrapper(name=“abilitiesList”)
@xmlement(name=“ability”)
私人列表能力;
}
您的getter和setter必须没有JAXB注释

您的能力列表将按如下方式整理:

<abilitiesList>
    <ability></ability>
    <ability></ability>
</abilitiesList>


如果不起作用,请提供所需XML的示例。

除了其他属性之外,我还需要您编写的XML。我不能复制整个类,因为它在我的工作和它的内部,但我在每个get()方法上面都使用@XmlElement。还有我在getList上面写的。我只有1个非法注释,当我尝试您的解决方案时,我删除了列表属性get()上方的注释,并像您编写的那样将其添加到属性本身,现在我有4个非法注释。非法注释问题来自XmlAccessorType。它指定应该注释的是字段而不是getter。如果您注释了字段而不是getter,那么它应该会起作用。我更新了答案。确定在将XmlElement移动到字段后,我返回到1非法注释,在完全删除Capabilities属性后,我仍然有非法注释。我仅有的注释是常规属性上方的XmlElement,以及对类字符串的一个重写,这就是我的全部内容。不知道出了什么问题,因为我以前尝试过这样做,只是添加了一些功能,把事情搞砸了。你怎么能提供IllegaAnnotationException的完整堆栈跟踪?好的,看来我使用ctrl+Y组合键将属性带回来,该操作移除了超级构造函数。我尝试了你的解决方案,它成功了。谢谢!