クラスに「abc」という属性があります。この属性を XML 文字列形式に変換するように制限したいと考えています。
これが XML 文字列に変換されるのを避けるために、属性で使用できる XML 注釈はありますか?
誰かがこれについて私を助けてください。
クラスに「abc」という属性があります。この属性を XML 文字列形式に変換するように制限したいと考えています。
これが XML 文字列に変換されるのを避けるために、属性で使用できる XML 注釈はありますか?
誰かがこれについて私を助けてください。
XML を処理するためにJAXB (JSR-222)実装を使用しているときにプロパティを除外する場合、いくつかのオプションがあります。
オプション1 -@XmlTransient
フィールド/プロパティを除外する最も一般的な方法は、 で注釈を付けること@XmlTransient
です。
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlTransient
private String foo;
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
オプション #2 -@XmlAccessorType(XmlAccessType.NONE)
プロパティの半分以上を除外したい場合は@XmlAccessorType(XmlAccessType.NONE)
、クラスに設定することをお勧めします。次に、注釈付きのフィールド/プロパティのみがマップされます。以下の例では、foo を除外する必要はありませんが、bar を明確に含める必要があります。
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Root {
private String foo;
@XmlElement
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
オプション #3 - 一時的な
フィールド アクセスを使用している場合は、フィールドを一時的なものとしてマークして除外することもできます。
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
private transient String foo;
private String bar;
public void setFoo(String foo) {
this.foo = foo;
}
public void setBar(String bar) {
this.bar = bar;
}
}
デモ
次のデモ コードは、どのオプションを選択しても使用できます。
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
root.setFoo("FOO");
root.setBar("BAR");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
出力
出力では、foo
要素が出力から除外されていることがわかります。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<bar>BAR</bar>
</root>
詳細については
@XMLTransientをお探しですか?