2009-08-11 93 views
0

一個Java類,我有以下的JSON,在那裏可以爲true或false:綁定JSON使用JAXB

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

我試圖將其綁定到使用澤西Java類及以下JAXB註釋:

@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"} 

有沒有辦法來標註「MyClass的」,這樣,當JSON的「FLAG1」和「FLAG2」不是布爾我得到一個異常?

+0

JAXB現在支持JSON嗎?或者你在使用第三方庫嗎? – kdgregory 2009-08-11 16:52:34

+0

我正在使用Jersey。 https://jersey.dev.java.net/ – 2009-08-11 16:57:29

+0

我認爲Jersey使用JAXB註釋,但有它自己的運行時。 – skaffman 2009-08-11 17:01:56

回答

2

它看起來像澤西島只是使用Boolean.valueOf,其中除字面「真」以外的其他東西都視爲假。由於JavaScript沒有變量類型的概念,因此這是一種可以證明的有效行爲。

比較而言,XML映射基於模式定義,它具有布爾值的非常具體的概念。 (因爲1.x的天或JAXB)


由於沒有使用的球衣,我想知道,如果你有註釋的實際變量,或者如果你能註釋setter方法。或者,也許你可以提供一個採用String並解析它的setter,而不是/和一個採用boolean的setter。

2

如果您使用純傑克遜JAX-RS提供程序,則顯示的內容將按照您希望的方式工作(拋出異常)。它確實接受一些變化(1和0,因爲一些語言沒有本地布爾類型),但不包含沒有意義的等價物。

另外,正如建議的那樣,一個類型爲String的setter方法是有意義的,因爲那樣你可以手動控制轉換。