2012-02-10 5 views
6

Mój serwer zwraca listę obiektów w JSON. Mogą być na przykład Cat s lub .Parsowanie obiektów JSON nieznanego typu za pomocą funkcji AutoBean na GWT

Gdy wiem, że wszystkie będą Cat s, mogę ustawić AutoBeanCodex do pracy łatwo. Kiedy nie wiem, jakie to są typy, chociaż ... co powinienem zrobić?

Mogłem nadać wszystkim moim podmiotom pole typu, ale wtedy musiałbym przeanalizować każdą jednostkę przed przekazaniem jej do AutoBeanCodex, która graniczy z pokonaniem punktu. Jakie mam inne opcje?

Odpowiedz

8

Po prostu trzeba się z tym bawić, i walczyłem z nim przez kilka godzin, próbując metod @Category i innych, dopóki nie znalazłem tego: Możesz utworzyć właściwość typu Splittable, która reprezentuje podstawowy rodzaj transportu, który ma niektóre kodowanie dla booleans/Strings/Lists/Maps. W moim przypadku, znam rodzaj obwiedni, który przechodzi przez przewód w czasie projektowania, a na podstawie innej właściwości, inne pole może być dowolną liczbą innych autorów.

Nie musisz nawet znać typu innej fasoli podczas kompilacji, możesz uzyskać wartości za pomocą metod Splittable, ale jeśli używasz autobeans, dobrze jest zdefiniować zawijane dane.

interface Envelope { 
    String getStatus(); 
    String getDataType(); 
    Splittable getData(); 
} 

(setery może być pożądane, jeśli wysyłania danych, a także ODBIORCZA - kodujący fasoli w `rozszczepialnego, aby wysłać go w kopercie jest nawet łatwiej niż dekodowanie go)

JSON przesyłane przez drut jest dekodowany (prawdopodobnie za pomocą AutoBeanCodex) do typu Envelope, a po zdecydowałeś, jakiego rodzaju musi być pochodzących z metody getData(), zadzwoń coś takiego dostać zagnieżdżony obiekt z

SpecificNestedBean bean = AutoBeanCodex.decode(factory, 
               SpecificNestedBean.class, 
               env.getData()).as(); 

Envelope Typ i typy zagnieżdżone (w powyższej factory) nie muszą nawet być takie same, jak typ AutoBeanFactory. Może to pozwolić na odszukanie odczytu/zapisu obwiedni z ogólnej instancji transportu i użycie konkretnej fabryki dla każdej właściwości łańcuchowej dataType w celu odkodowania modelu danych (i modeli zagnieżdżonych).