gpt4 book ai didi

java - 如何使用 JAXB 忽略绑定(bind)到 XML 的字段

转载 作者:行者123 更新时间:2023-11-30 07:04:38 31 4
gpt4 key购买 nike

我有一个看起来像这样的简单类

    import nl.hu.pf.coproco.model.Observeable;

@XmlRootElement (name = "Purpose")
@XmlAccessorType (XmlAccessType.FIELD)
public class Purpose implements Observeable{
private String name;
private ArrayList<Observer> observers;

@XmlElement (name = "subPurpose")
private ArrayList<Purpose> subPurposes;

//methods
}

但是 Observable 是一个接口(interface),所以我得到一个异常,因为 JAXB 不能处理接口(interface)。我试着弄清楚如何使用 ArrayList<Observer> 忽略该字段所以它不会导出到 xml。

我尝试使用 @XmlTransient注释,但我得到以下信息 javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"purpose"). Expected elements are <{}Purpose>

解码时会发生这种情况,但我也想编码那个类

示例 xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purpose>
<name>All Purposes</name>
<subPurpose>
<name>Creational</name>
</subPurpose>
<subPurpose>
<name>Structural</name>
</subPurpose>
<subPurpose>
<name>Behavioral</name>
<subPurpose>
<name>Behavioral 1</name>
</subPurpose>
<subPurpose>
<name>Behavioral 2</name>
</subPurpose>
</subPurpose>
</purpose>

界面Observable看起来像这样:

public interface Observeable {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers(Object o, String arg);
}

最佳答案

您的 xml 包含 purpose 而不是 Purpose 因此将 @XmlRootElement(name = "Purpose") 更改为

@XmlRootElement(name = "purpose")

然后像这样在观察者上添加@XmlTransient

@XmlTransient
private ArrayList<Observer> observers;

关于java - 如何使用 JAXB 忽略绑定(bind)到 XML 的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470910/

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