【发布时间】:2016-06-10 14:25:03
【问题描述】:
我正在挑选一些其他人编写的代码,但我很难理解如何访问子类。
父类:
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 消息映射的 Message 实例,但我不知道如何访问“类型”字段以及如何访问“主题”字段(如果是电子邮件)。
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());
【问题讨论】:
-
这通常意味着在代码中你必须像
if (message instanceof EmailMessage) { .. cast .. }那样做某事 -
您有消息实例或消息列表?无论如何,您尝试过什么?
-
我刚刚用我尝试过的方法更新了它。有一个消息列表,我要第一个尝试看看我是否能得到类型。
-
而且您不需要访问 type 字段(因为它没有在模型中公开)。您需要使用
instanceof -
@zapl 好的,这是有道理的。我只是想也许有办法说像 message.type()。
标签: java json spring jackson pojo