2014-07-11 12 views
6

Jestem zaznajomiony z normalną polimorficzną strukturą deserializacji, w której deserializuje się obiekt na podstawie wartości ciągu określonego pola. Na przykład:Formatowanie polimorficzne Jackson na polach całkowitych zamiast ciągów znaków

@JsonSubTypes(
      { 
       @JsonSubTypes.Type(value = LionCage.class, name = "LION"), 
       @JsonSubTypes.Type(value = TigerCage.class, name = "TIGER"), 
      } 
     ) 
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") 

Czy istnieje jakiś sposób, aby zrobić w zasadzie to samo, gdy „typ” pola obiektu przychodzącego jest liczbą całkowitą, a nie ciąg? Tak więc w powyższym przykładzie "LION" i "TIGER" będą miały wartość 1 i 2. Z jakiegoś powodu nie byłem w stanie tego rozgryźć.

Ponadto, jak powinienem był to wymyślić? Wydaje się, że powinno to być coś oczywistego.

+0

Integer jest w porządku, o ile klasa twojego modelu używa ciągu znaków dla właściwości zewnętrznej. Jackson jest wystarczająco inteligentny, aby przekonwertować integer na ciąg znaków dla ciebie. Zrobiłem coś bardzo podobnego tutaj, jeśli interesują Cię szczegóły: http://stackoverflow.com/questions/38501574/rules-for-jersey-to-parse-json – pandaadb

Odpowiedz

0

Nie, opcja ta nie jest dostępna za pośrednictwem adnotacji. Interfejs TypeIdResolver pobiera i zwraca łańcuchy. Można to zrobić za pomocą niestandardowego parsera/serializera z wykorzystaniem strumienia Jackson API, ale wydaje się, że trzeba dużo pracy, aby przełączyć go na pole numeryczne. Zrobiłbym to tylko, gdyby wymagał tego system kogoś innego. Gdybym posiadał całość, po prostu użyłbym konfiguracji, którą zamieściłeś w pytaniu.

Powiązane problemy