访问 JSON 多态 POJO Class

Access JSON Polymorphic POJO Class

我正在使用其他人编写的一些代码,但我很难理解如何访问 child class。

Parent Class:

package blah.blah.blah;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonSubTypes;

import java.io.Serializable;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value = EmailMessage.class, name = "Email"),
    @JsonSubTypes.Type(value = SMSMessage.class, name = "SMS")
})    
public class Message implements Serializable {

   private static final long serialVersionUID = 1L;

   private String messageBody;

   public String getMessageBody() {
      return messageBody;
   }
   public void setMessageBody(String messageBody) {
      this.messageBody = messageBody;
   }
}

Child Class:

package blah.blah.blah;

public class EmailMessage extends Message {
   private String subject;

   public String getSubject() {
       return subject;
   }
   public void setSubject(String subject) {
       this.subject = subject;
   }
}

Child Class:

package blah.blah.blah;

public class SMSMessage extends Message {
}

我有一个从 JSON 消息映射的 Message 实例,但我不知道如何访问 'Type' 字段以及如何访问 'Subject' 字段(如果这是一封电子邮件。

JSON:

"messageList": [{
    "type": "Email",
    "messageBody": "Email body",
    "subject": "Email subject"
}, {
    "type": "SMS",
    "messageBody": "SMS body"
}]

我尝试过的:

Message incomingMessage = messageList.getMessageList().get(0);
log.info("Message Body: " + incomingMessage.getMessageBody());

感谢@cricket_007 和@zapl 在评论中的回答。请随意写下这个答案,我会接受你的。但这是我现在所拥有的。

    for (Message incomingMessage : messageInitRequest.getMessageList()) {

        if (incomingMessage instanceof EmailMessage) {

            EmailMessage emailMessage = (EmailMessage) incomingMessage;

            System.out.println("Type: Email");
            System.out.println(emailMessage.getMessageBody());
            System.out.println(emailMessage.getSubject());

        } else if (incomingMessage instanceof SMSMessage) {

            SMSMessage smsMessage = (SMSMessage) incomingMessage;

            System.out.println("Type: SMS");
            System.out.println(smsMessage.getMessageBody());
        }

    }