2012-10-25 4 views
20

かなり簡単な質問です。私はJerseyを使ってRESTシステムを構築しています。処理中に使用する必要のあるクラスがありますが、クラスがマーシャリングされたときにXMLまたはJSON出力の一部として送信したくない場合は、無視する方法がありますか?私はgetA()オーバーignore=trueまたは@IgnoregetC()以上のような何かがうまくいくことを望んでいるだろうが、私は何のドキュメントを見つけることができませんJersey/JAX-RSアノテーションを使用して、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. 
} 

:のようなもの。

答えて

32

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

オプション#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)

あなたは私がXmlAccessType.NONEを設定するには、タイプレベルで@XmlAccessorTypeのアノテーションを使用することをお勧めします無視性質の半分以上必要な場合。これにより、注釈付きのプロパティのみが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. 
} 

+1

美しいです!本当にありがとう。 –

+1

私の一日をありがとう –

関連する問題