Раздел “data” содержит специфические данные для каждой транзакции . Шапка присутствует в каждой транзакции. При десерилизации если использовать POJO запрос разбивается на 2 класса. Класс шапки и класс транзакции. Как использовать класс шапки для всех транзакций? Сейчас я использую патерн Builder и в классе шапки прописываю конструктор для объекта каждой транзакции . Хочется более изящное решение проблемы.
Я встречал похожую задачу, когда работал с сокетами. В каждом сообщении приходил event (строка) и data (объект). От event’а зависело, какого типа объект в data
public class WebSocketIncomingMessage<T> {
private String event;
private String dataAsString;
private Class<T> type;
private T data;
public WebSocketIncomingMessage(String str) throws IOException {
JsonNode root = new ObjectMapper().readTree(str);
event = root.get("event").textValue();
dataAsString = root.get("data").toString();
}
public T getData() throws IOException {
if (data == null) {
this.data = new ObjectMapper().readValue(dataAsString, type);
}
return data;
}
public void setType(Class<T> type) {
this.type = type;
}
public String getEvent() {
return event;
}
public Class<T> getType() {
return type;
}
@Override
public String toString() {
return "WebSocketIncomingMessage{" +
"event='" + event + '\'' +
", type=" + type +
", dataAsString='" + dataAsString + '\'' +
'}';
}
}
Вот WebSocketIncomingMessage - это общий для всех сообщений класс.
В зависимости от event, определяется type (в моем случае, event’ы совпадают с именами классов, так удобнее выводить нужный тип данных). И вот к этому type приводится dataAsString (см метод getData())