Polymorphic JSON deserialization with Jackson
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 25/100
Rechercherichtung
Beginne mit der SDK Java JSON-Jackson-Dokumentation und der im Issue gezeigten Verwendung von mapData und PojoCloudEventDataMapper und vergleiche sie anschließend mit Jacksens Ansatz mit @JsonTypeInfo und @JsonSubTypes. Als erledigt gilt dies, wenn eine dokumentierte oder implementierte Möglichkeit vorhanden ist, polymorphe Payload-Typen aus dem CloudEvent-Umschlag aufzulösen, wobei das unterstützte Verhalten und die Einschränkungen klar dargelegt sind.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
I was wondering how to write a polymorphic parser for JSON CloudEvents, where the payload can be one of many types.
Normally, with plain Jackson one can do something like this, using @JsonTypeInfo and a type field somewhere in the JSON to determine the specific class for deserialization.
In this simple example in the CloudEvent SDK docs we knew the type in advance:
PojoCloudEventData<User> cloudEventData = mapData(
inputEvent,
PojoCloudEventDataMapper.from(objectMapper,User.class)
);
But in my case, I would like to achieve something like the following:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "type"
)
@JsonSubTypes({
@JsonSubTypes.Type(value = Foo.class, name = "foo"),
@JsonSubTypes.Type(value = Bar.class, name = "bar")
})
sealed interface Payload permits Foo, Bar {}
record Foo(String str) implements Payload {}
record Bar(int i) implements Payload {}
// ...
PojoCloudEventData<Payload> cloudEventData = mapData(
inputEvent,
PojoCloudEventDataMapper.from(objectMapper, Payload.class)
);
Running this code, it results in an error (as expected):
com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class Payload]: missing type id property 'type'
Because the type field is part of the CloudEvent header and/or envelope that Jackson does not know about at this point.
What's your take on this?
- Vorherrschende Sprache
- Java
- Sterne
- 446
- Forks
- 172
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus cloudevents/sdk-java
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
cloudevents/sdk-java#731 · 1 Reaktion ·
-
bug
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 88/100
cloudevents/sdk-java#697 · 3 Kommentare ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
cloudevents/sdk-java#689 · 2 Kommentare ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
cloudevents/sdk-java#660 · 2 Kommentare ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 38/100
cloudevents/sdk-java#748 ·
Alle Issues in cloudevents/sdk-java
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
apache/arrow-java#1311 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
bug triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag
-
security
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
IBM/networking-java-sdk#204 ·
-
bug Technical Debt
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
avniproject/avni-server#1080 ·