Сопоставить строку с объектом, используя Джексона с наследованием - PullRequest
0 голосов
/ 18 марта 2020

У меня есть класс QueueContent, который у него есть, является суперклассом двух других.

Я получаю строку в формате JSON, которая содержит информацию, необходимую для извлечения. Суперкласс:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class QueueContent {

    private String empresa;
    private String empresa_cor;
    private String empresa_contato;
    private String empresa_url;
    private String empresa_telefone;
    private String empresa_idioma;

    public QueueContent(String empresa, String empresa_cor, String empresa_contato, String empresa_url, String empresa_telefone, String empresa_idioma) {
        this.empresa = empresa;
        this.empresa_cor = empresa_cor;
        this.empresa_contato = empresa_contato;
        this.empresa_url = empresa_url;
        this.empresa_telefone = empresa_telefone;
        this.empresa_idioma = empresa_idioma;
    }

    public QueueContent() {
    }
}

Я использую Lombok для генерации методов получения / установки)

Это дочерний класс:

@Data
public class EmailCameraOffline extends  QueueContent {
    private Timestamp camera_last_online;
    private String camera_nome;
    private String empresa_url_plataforma;

    public EmailCameraOffline(String empresa, String empresa_cor, String empresa_contato, String empresa_url, String empresa_telefone, String empresa_idioma, Timestamp camera_last_online, String camera_nome, String empresa_url_plataforma) {
        super(empresa, empresa_cor, empresa_contato, empresa_url, empresa_telefone, empresa_idioma);
        this.camera_last_online = camera_last_online;
        this.camera_nome = camera_nome;
        this.empresa_url_plataforma = empresa_url_plataforma;
    }

    public EmailCameraOffline() {
    }
}

Итак, я done:

 EmailCameraOffline infosEmail = new ObjectMapper().readValue(content, EmailCameraOffline.class);
                System.out.println(infosEmail);

И вывод:

 EmailCameraOffline (camera_last_online = 2020-03-12 03: 01: 45.0, camera_nome = Pier Cam 1, empresa_url_platform = null)

Как получить объект EmailCameraOffline для инициализации атрибутов суперкласса?

1 Ответ

2 голосов
/ 18 марта 2020

Все должно быть нормально загружено и инициализировано, поэтому вызов:

System.out.println(infosEmail.getEmpresa());

должен дать ожидаемое значение.

Проблема

Проблема в реализации по умолчанию toString() метод (выполняется через @Data) в классе EmailCameraOffline, который не включает унаследованные поля.

Решение

Чтобы исправить это, вы можете "переопределить" @Data 's toString() реализация, включающая также унаследованные поля с использованием Lombok:

@Data
@ToString(callSuper = true)
public class EmailCameraOffline extends QueueContent {
...
}
...