Polymorphic JSON deserialization with Jackson
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
Direzione di ricerca
Inizia dalla documentazione di SDK Java JSON-Jackson e dall’utilizzo di mapData e PojoCloudEventDataMapper mostrato nell’issue, quindi confrontali con l’approccio di Jackson basato su @JsonTypeInfo e @JsonSubTypes. Il lavoro sarà completo quando sarà disponibile un modo documentato o implementato per risolvere i tipi di payload polimorfici dall’envelope CloudEvent, con il comportamento supportato e le limitazioni chiaramente indicati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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?
- Lingua principale
- Java
- Stelle
- 446
- Fork
- 172
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di cloudevents/sdk-java
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
cloudevents/sdk-java#731 · 1 reazione ·
-
bug
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
cloudevents/sdk-java#697 · 3 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
cloudevents/sdk-java#689 · 2 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
cloudevents/sdk-java#660 · 2 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
cloudevents/sdk-java#748 ·
Tutte le issue di cloudevents/sdk-java
Issue simili
-
area-deployment area-integrations triage:bot-seen
Difficoltà 2/5 Mezza giornata Idoneità per principianti 86/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
apache/flink-agents#1156 ·
-
[source-shopify] FAILED bulk operation without partialDataUrl is silently treated as successful Apertaarea/connectors autoteam community connectors/source/shopify needs-triage team/use type/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100