Polymorphic JSON deserialization with Jackson
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Bắt đầu với tài liệu SDK Java JSON-Jackson và cách sử dụng mapData và PojoCloudEventDataMapper được nêu trong issue, sau đó so sánh chúng với cách tiếp cận của Jackson bằng @JsonTypeInfo và @JsonSubTypes. Công việc được xem là hoàn tất khi có một cách đã được tài liệu hóa hoặc triển khai để phân giải các kiểu payload đa hình từ CloudEvent envelope, đồng thời nêu rõ hành vi được hỗ trợ và các giới hạn.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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?
- Ngôn ngữ chính
- Java
- Star
- 446
- Fork
- 172
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của cloudevents/sdk-java
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
cloudevents/sdk-java#731 · 1 reaction ·
-
bug
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
cloudevents/sdk-java#697 · 3 bình luận ·
-
Spring CloudEventMessageConverter produce a null pointer exception if initial message header map is nullCó thể đã có người làm @prashantdotnaagar đã nhận 78 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
cloudevents/sdk-java#689 · 2 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
cloudevents/sdk-java#660 · 2 bình luận ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 38/100
cloudevents/sdk-java#748 ·
Tất cả issue của cloudevents/sdk-java
Issue tương tự
-
[Bug] The shared instance selector's placeholder and no-match text ignore the display languageCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
apache/rocketmq-dashboard#5561 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
HMCL-dev/HMCL#6934 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
test(setup): GitHub configuration tests fail when the temp path is long enough for YAML foldingĐang mởbug good first issue help wanted priority medium size S
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
martin-francois/symphony-trello#776 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Console.printHexĐang mởgood first issue kernel
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
JackFurton/who-would-build-a-kernel-in-java#33 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100