2016-06-10 3 views
0

다른 사람이 작성한 일부 코드를 선택하고 하위 클래스에 액세스하는 방법을 이해하는 데 어려움을 겪고 있습니다.JSON 다형성 POJO 클래스에 액세스

부모 클래스 :

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; 
    } 
} 

아이 클래스 :

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; 
    } 
} 

아이 클래스 :

package blah.blah.blah; 

public class SMSMessage extends Message { 
} 

나는 JSON 메시지에서 매핑 된 메시지의 인스턴스를 가지고 있지만 난 못해 '유형'입력란에 액세스하는 방법과 '제목'입력란에 액세스하는 방법을 설명합니다 (이메일 인 경우).

JSON :

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

내가 무엇을 시도했다 : 코멘트에 답변을 cricket_007 및 @zapl @

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

{.. 캐스트 ..}'당신은 메시지의 인스턴스 또는 메시지의 목록을 – zapl

+0

? 어쨌든, 당신은 무엇을 시도 했습니까? –

+0

방금 ​​시도한 내용으로 업데이트했습니다. 메시지 목록이 있습니다. 유형을 얻을 수 있는지 먼저 시도하고 볼 수 있습니다. –

답변

1

감사합니다. 이 답변을 쓰는 ​​것이 좋습니다. 나는 당신의 것을 받아 들일 것입니다. 하지만 내가 지금하고있는 일이 여기에 있습니다. 일반적으로는`경우 (EmailMessage instanceof를 메시지) 등의 STH을해야 할 코드의 의미

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()); 
     } 

    }