/ / Java - Deserializuj używając getters / setters zamiast z odbiciem - java, rest, jackson

Java - Deserializuj używając getters / setters zamiast refleksji - java, rest, jackson

Mam pojo, które zapełnia ukrytą zmienną, gdy wywoływane są jej metody ustawiające.

Moje pojo jest prawie identyczne do: Mapowanie POJO Gson traci wartość pola niestandardowego

Używam jackson 1.9.6 w moim projekcie JAX-RS. Po wywołaniu REST zużywa JSON i automagicznie przekształca go w instancję pojo. Wierzę, że jackson używa do tego celu refleksji. Jest to dla mnie złe, ponieważ odbicie pomija metody setera, a moja ukryta zmienna nigdy nie jest wypełniana.

Jak powiedzieć jacksonowi, aby uniknął refleksji i konkretnie nazwał metody getter / setter? Czy muszę oznaczać każdą pojo przez @JsonDeserialize? Jeśli tak, to jak mam napisać ogólny Deserializer (aka MyDeserializer extends JsonDeserializer<T>) do obsługi różnych koncepcji? Czy istnieje lepszy sposób, o którym nie myślę?

Uwaga: W przypadkach testowych (poza REST) ​​odniosłem sukces stosując ObjectMapper.readValue(json,class), ale nie jestem pewien, jak przenieść ten kod do JsonDeserializer.

Odpowiedzi:

0 dla odpowiedzi № 1

Miałem problem podobny do tego: Używałem Retrofit, a Jackson i deserializacji klucza JSON zawsze ignorował mojego anotowanego setera i używał refleksji na prywatnych polach i nigdy niczego nie ustawiał. Okazuje się, że klejnotem informacji, których potrzebowałem (RTFM), było to, że Retrofit domyślnie używa GSON i to jest zachowanie GSON. Jackson nie był przyzwyczajony do deserializacji.

Więc musisz napisać konwerter Retrofit, który używa Jacksona. Przykład tego można znaleźć tutaj: http://kdubblabs.com/java/retrofit-by-square/retrofit-using-jackson-json-conversion/