web-dev-qa-db-ja.com

XML / JSONにマーシャリングするときに、Jersey / JAX-RSアノテーションを使用してクラスメンバーをスキップすることは可能ですか?

かなり簡単な質問です。ジャージーを使用してRESTシステムを構築しています。処理中に使用する必要がある値を持つクラスがあるが、XMLまたはJSON出力の一部として送信したくない場合クラスはマーシャリングされていますが、それを無視する方法はありますか?

_@XmlRootElement(name="example")
class Example {
    private int a;
    private String b;
    private Object c;

    @XmlElement(ignore=true)
    public int getA() { return a; }
    @XmlElement
    public String getB() { return b; }
    @Ignore
    public Object getC() { return c; }
    ... //setters, constructors, etc.
}
_

_ignore=true_ over getA()または_@Ignore_ over getC()のようなものが機能することを願っていますが、ドキュメントが見つかりません。

21
Ken Bellows

無視するフィールド/プロパティの数に応じて、いくつかのオプションがあります。

オプション#1 -_@XmlTransient_

プロパティの半分未満を無視する場合は、_@XmlTransient_で注釈を付けることをお勧めします。これにより、それらはXMLマッピングから除外されます。

_@XmlRootElement
class Example {
    private int a;
    private String b;
    private Object c;

    @XmlTransient
    public int getA() { return a; } // UNMAPPED

    public String getB() { return b; } // MAPPED

    @XmlTransient    
    public Object getC() { return c; } // UNMAPPED

    ... //setters, constructors, etc.
}
_

オプション#2-@XmlAccessorType(XmlAccessType.NONE)

プロパティの半分以上を無視したい場合は、タイプレベルで_@XmlAccessorType_アノテーションを使用して_XmlAccessType.NONE_を設定することをお勧めします。これにより、注釈付きのプロパティのみがXMLにマップされます。

_@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
class Example {
    private int a;
    private String b;
    private Object c;

    public int getA() { return a; } // UNMAPPED

    @XmlElement
    public String getB() { return b; } // MAPPED

    public Object getC() { return c; } // UNMAPPED

    ... //setters, constructors, etc.
}
_

詳細情報

34
bdoughan