2009-08-11 9 views
0

を使用してJavaクラスへのJSON私は真または偽のいずれかになります以下のJSONを、持っているバインディング:はJAXB

{"flag1":<boolean value>, "flag2":<boolean value>} 

をそして私はジャージーと、次のJAXBを使用してJavaクラスにバインドしようとしています注釈:

@XmlRootElement 
public class MyClass { 
    @XmlElement(name = "flag1", type = Boolean.class) 
    private Boolean flag1; 
    @XmlElement(name = "flag2", type = Boolean.class) 
    private Boolean flag2; 

    ... 
} 

問題は、私は以下の例のように「FLAG1」または「FLAG2」、非ブール値を割り当てるとき、JAXBを自動的「FLAG1」と「FLAG2に偽の値を割り当てることです'MyClassのフィールド。

{"flag1":"foo", "flag2":"bar"} 

JSONの「FLAG1」と「FLAG2」のブールれていないとき、私は例外を取得するように「MyClassの」の注釈を付ける方法はありますか?

+0

JAXBは現在、JSONをサポートしていますか?または、サードパーティのライブラリを使用していますか? – kdgregory

+0

私はジャージーを使用しています。 https://jersey.dev.java.net/ –

+0

JerseyはJAXBアノテーションを使用しますが、独自のランタイムを使用していると思います。 – skaffman

答えて

2

ジャージーは、単に偽としてリテラル「真」以外のすべてを扱うBoolean.valueOfを、使用しているように見えます。 JavaScriptには可変型の概念がないため、これは間違いなく有効な動作です。

XMLマッピングは、比較することによって、ブール値の非常に具体的な概念を持っていないスキーマ定義に基づいています。 (1.xの頃からか、JAXB)ジャージーを使用した未


、あなたが実際の変数に注釈を付ける必要がある場合、私は思ったんだけど、またはあなたがセッターに注釈を付けることができれば。それとも代わりに/ booleanを取るセッターとともに、Stringを受け取り、それを解析しセッターを提供することができます。あなたは純粋なジャクソンJAX-RSプロバイダーを使用した場合、あなたが望むように働くだろう示した何

2

(例外をスロー)。いくつかのバリエーション(一部の言語はネイティブのブール型を持たないため、1と0)を受け入れますが、意味のある同等のものはありません。

、あなたが変換を手動で制御できるので、また、提案されているように、String型とsetterメソッドは、理にかなっています。