Chcę użyć biblioteki JSON JACKSON dla metody ogólnej w następujący sposób:
public MyRequest<T> tester() {
TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>();
MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
return requestWrapper.getRequest();
}
...
public class MyWrapper<T> {
private MyRequest<T> request;
public MyRequest<T> getRequest() {
return request;
}
public void setRequest(MyRequest<T> request) {
this.request = request;
}
}
public class MyRequest{
private List<T> myobjects;
public void setMyObjects(List<T> ets) {
this.myobjects = ets;
}
@NotNull
@JsonIgnore
public T getMyObject() {
return myobjects.get(0);
}
}
Teraz problem polega na tym, że kiedy wywołuję getMyObject (), który znajduje się wewnątrz obiektu żądania, jackson zwraca zagnieżdżony obiekt niestandardowy jako LinkedHashMap. Czy istnieje sposób, w jaki określę, że obiekt T ma zostać zwrócony ?. Na przykład: jeśli wysłałem obiekt typu Klient, to Klient powinien zostać zwrócony z tej Listy ?.
Dzięki.
TypeReference
abstrakcyjne?Odpowiedzi:
Jest to dobrze znany problem z wymazywaniem typu Java: T jest tylko zmienną typu i musisz wskazać aktualną klasę, zwykle jako argument klasy. Bez takich informacji najlepsze, co można zrobić, to użyć granic; a zwykłe T jest mniej więcej tym samym, co „T rozszerza obiekt”. Następnie Jackson powiąże obiekty JSON jako mapy.
W takim przypadku metoda testera musi mieć dostęp do Class, a Ty możesz konstruować
i wtedy
źródło
„JavaType” działa !! Próbowałem usunąć (deserializować) Listę w JSON String do ArrayList java Objects i od wielu dni starałem się znaleźć rozwiązanie.
Poniżej znajduje się kod, który ostatecznie dał mi rozwiązanie. Kod:
źródło
IOException
(wystarczy jeden haczyk) i że domyślny introspektor adnotacji już jestJacksonAnnotationIntrospector
- więc nie musisz nic robićObjectMapper
, po prostu go skonstruuj i działa.Zmodyfikowałem odpowiedź rushidesai1, dodając działający przykład.
JsonMarshaller.java
Wynik
JsonMarshallerUnmarshaller.java
Station.java
data.json
źródło