Heim > Java > javaLernprogramm > Hauptteil

Wie deserialisiere ich einen generischen Typ innerhalb eines JSON-Objekts mit Jackson in Java?

Barbara Streisand
Freigeben: 2024-10-31 01:05:29
Original
825 Leute haben es durchsucht

 How do I deserialize a generic type within a JSON object using Jackson in Java?

Jackson und generische Typreferenz

In Java werden Generika verwendet, um Typen darzustellen, die mit anderen Typen parametrisiert werden können. Dies ermöglicht die Wiederverwendung von Code und eine größere Flexibilität. Bei der Arbeit mit JSON mithilfe von Jackson können generische Typen jedoch bestimmte Herausforderungen mit sich bringen.

Ein häufiges Problem tritt beim Zugriff auf generische Eigenschaften innerhalb eines JSON-Objekts auf. Betrachten Sie den folgenden Java-Code:

<code class="java">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<T> {
    private List<T> myobjects;
    public void setMyObjects(List<T> ets) { this.myobjects = ets; }
    @NotNull
    @JsonIgnore
    public T getMyObject() { return myobjects.get(0); }
}</code>
Nach dem Login kopieren

Beim Aufruf von getMyObject(), das sich im MyRequest-Objekt befindet, gibt Jackson das verschachtelte benutzerdefinierte Objekt als LinkedHashMap zurück. Dies liegt daran, dass Jackson den tatsächlichen Typ von T nicht allein anhand der generischen Deklaration bestimmen kann.

Um dieses Problem zu lösen und den Typ von T anzugeben, ist ein explizites Klassenargument erforderlich. Dies kann durch die Konstruktion eines JavaType-Objekts wie folgt erfolgen:

<code class="java">TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>() {};
JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, Foo.class);
MyWrapper<Foo> requestWrapper = mapper.readValue(jsonRequest, type);</code>
Nach dem Login kopieren

In diesem Beispiel stellt die Foo-Klasse den tatsächlichen Typ von T dar. Durch die Konstruktion eines JavaType mit dem gewünschten Typ kann Jackson das ordnungsgemäß deserialisieren JSON-Objekt und geben Sie den richtigen T-Typ zurück.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich einen generischen Typ innerhalb eines JSON-Objekts mit Jackson in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!