我的服務器返回JSON中的對象列表。例如,它們可能是Cat
或Dog
。使用GWT上的AutoBean解析未知類型的JSON對象
當我知道他們都將是Cat
s,我可以設置AutoBeanCodex
輕鬆工作。當我不知道它們是什麼類型時,但是......我應該怎麼做?
我可以給我所有的實體一個類型字段,但然後我必須解析每個實體,然後纔將它傳遞給AutoBeanCodex
,這與界限不符。我還有什麼其他選擇?
我的服務器返回JSON中的對象列表。例如,它們可能是Cat
或Dog
。使用GWT上的AutoBean解析未知類型的JSON對象
當我知道他們都將是Cat
s,我可以設置AutoBeanCodex
輕鬆工作。當我不知道它們是什麼類型時,但是......我應該怎麼做?
我可以給我所有的實體一個類型字段,但然後我必須解析每個實體,然後纔將它傳遞給AutoBeanCodex
,這與界限不符。我還有什麼其他選擇?
剛開始使用這個有一天,並爭取了幾個小時,嘗試@Category
方法和其他,直到我發現這一點:您可以創建一個屬性Splittable
類型,它代表的底層傳輸類型一些編碼爲布爾值/字符串/列表/地圖。就我而言,我知道一些在設計時會覆蓋線的包絡類型,並且基於其他一些屬性,其他一些域可以是任何其他的自動對象。
你甚至都不需要知道其他的bean在編譯時的類型,你可以使用Splittable
的方法得到的值,但是如果使用autobeans無論如何,它是很好的定義被包裹的數據。
interface Envelope {
String getStatus();
String getDataType();
Splittable getData();
}
(塞特斯可能,如果你發送的數據以及recieving期望 - 編碼豆成`可裂到在一個信封把它比解碼更容易)
的JSON發送過來的電線被解碼(可能使用AutoBeanCodex
)到Envelope
類型,並且你已經決定以後有什麼類型必須走出getData()
方法,調用像這樣得到嵌套對象了
SpecificNestedBean bean = AutoBeanCodex.decode(factory,
SpecificNestedBean.class,
env.getData()).as();
的Envelope
類型和嵌套類型(上面的factory
)甚至不需要是相同的AutoBeanFactory
類型。這可以讓你從通用傳輸實例中抽象出信封的讀寫,併爲每個dataType
字符串屬性使用特定的工廠來解碼數據的模型(和嵌套模型)。