У меня проблемы с отображением объекта строки JSON на подкласс в Java.У меня есть класс Message
, который содержит MessageType
и String
с содержанием сообщения.
public class Message {
protected MessageType messageType;
protected String content;
public MessageType getMessageType() {
return messageType;
}
public String getContent() {
return content;
}
public void setMessageType(MessageType messageType) {
this.messageType = messageType;
}
public void setContent(String content) {
this.content = content;
}
}
Существует также специальный вид сообщения, это сообщение содержит дополнительную переменную.Я сделал это сообщение подклассом Message
класса:
public class QuestionMessage extends Message {
private Question question;
public QuestionMessage() {
}
public Question getQuestion() {
return question;
}
public void setQuestion(Question question) {
this.question = question;
}
}
Где класс вопроса определяется как:
public class Question {
private String question;
private String answerA;
private String answerB;
private String answerC;
private String correctAnswer;
//Getters and setters down here.
}
Где-то еще в моем коде я получаю строку JSON иЯ использую ObjectMapper
Джексона для сопоставления этой строки с классом Message
:
objectMapper.readValue(jsonString, Message.class);
Теперь иногда строка JSON является обычным сообщением, например:
{"messageType":"NORMAL","content":"Content string"}
Эта строка JSONуспешно сопоставляется с классом Message
и возвращает объект Message
.Однако, когда мой код получает специальное сообщение, такое как:
{"messageType":"NEW_QUESTION", "content":"Content String","question":{"question":"123","answerA":"123","answerB":"123","answerC":"123"}}
К сожалению, мой код не может отобразить последнее сообщение json в класс QuestionMessage
.Возможно ли с помощью JacksonXML отобразить на подкласс (QuestionMessage
) класса (Message.class
), который вы передаете объектному картографу?
Или это невозможно, и мне сначала нужно найти входящий jsonстрока для узла «вопрос», а затем специально вызывать:
objectMapper.readValue(jsonString, QuestionMessage.class);
вместо
objectMapper.readValue(jsonString, Message.class);