Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Polymorphic JSON deserialization with Jackson

Offen
#666 1 Kommentar 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
25/100
Issue-Typ
Feature
Klarheit
Muss geklärt werden
Aktivitätsstatus
Veraltet
Tech-Stack
java, json
Bereich
api, backend

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

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus cloudevents/sdk-java

Alle Issues in cloudevents/sdk-java

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.