From 198b6b76a81403a9fb2a111f67bf3144b7f83614 Mon Sep 17 00:00:00 2001 From: asmhatre Date: Tue, 4 Aug 2026 17:32:13 +0000 Subject: [PATCH] Part 5: polymorphic base type with @JsonTypeInfo and @JsonSubTypes --- .../part5polymorphic/PaymentMethod.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/ankurm/jackson3/part5polymorphic/PaymentMethod.java diff --git a/src/main/java/com/ankurm/jackson3/part5polymorphic/PaymentMethod.java b/src/main/java/com/ankurm/jackson3/part5polymorphic/PaymentMethod.java new file mode 100644 index 0000000..3b6f15d --- /dev/null +++ b/src/main/java/com/ankurm/jackson3/part5polymorphic/PaymentMethod.java @@ -0,0 +1,27 @@ +package com.ankurm.jackson3.part5polymorphic; + +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +/** + * Post: Polymorphic Deserialisation — https://ankurm.com/jackson-polymorphic-deserialization/ + * Section: "Setting Up the Hierarchy with @JsonTypeInfo and @JsonSubTypes" + */ +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, // use a logical name as the discriminator + include = JsonTypeInfo.As.PROPERTY, // embed it as a field in the JSON object + property = "paymentType" // the JSON key that carries the type name +) +@JsonSubTypes({ + @JsonSubTypes.Type(value = CreditCardPayment.class, name = "credit_card"), + @JsonSubTypes.Type(value = BankTransferPayment.class, name = "bank_transfer") +}) +public abstract class PaymentMethod { + private Long paymentId; + private double amountDue; + + public Long getPaymentId() { return paymentId; } + public double getAmountDue() { return amountDue; } + public void setPaymentId(Long v) { this.paymentId = v; } + public void setAmountDue(double v) { this.amountDue = v; } +}