JSONSerialize (fasterxml.jackson) serializacja obiektu DTO bez klass dziedziczących

0

Witam, korzystam z JSONSerializer-a do serializacji stringa

 
 private boolean checkIfAssortmentMetadataChanged(VersionedMetadataDto currentVersion, VersionedMetadataDto lastVersion) {
String currentAssortmentJsonData = JSONSerializer.serializeToJSON(currentVersion);
        String lastVersionAssortmentJsonData = JSONSerializer.serializeToJSON(lastVersion);

        return  !StringUtils.equals(currentAssortmentJsonData, lastVersionAssortmentJsonData);
}

Niestety obiekt VersionedMetadataDto dziedziczy klasa VersionedAssortmentDto

public class VersionedAssortmentDto extends VersionedMetadataDto 

W jaki sposób mogę serializować dane z obiektu VersionedMetadataDto bez brania pod uwagę VersionedAssortmentDto ?

2

Dla jacskona mozna zrobic tak:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

//wylistowanie propertisow z klasy bazowej
@JsonIgnoreProperties(value = { "baseTestClass" })
public class TestClass extends BaseTestClass {
    private String testClass = "dupa";

    public String getTestClass() {
        return testClass;
    }

}

public class BaseTestClass {
    private String baseTestClass = "dupa bazowa";

    public String getBaseTestClass() {
        return baseTestClass;
    }
}

Mozna tez rzucic po prostu @JsonIgnore:

  1. W klasie bazowej lub
  2. W klasie dziedziczacej nadpisujac gettera z klasy bazowej

import com.fasterxml.jackson.annotation.JsonIgnore;

public class TestClass extends BaseTestClass {
    private String testClass = "dupa";

    public String getTestClass() {
        return testClass;
    }

    @JsonIgnore
    public String getBaseTestClass() {
        return super.getBaseTestClass();
    }
}

Nigdy tego nie potrzebowalem wiec moga byc lepsze rozwiazania, te przyszly mi do glowy w danej chwili :)

0

NO i właśnie problem jest taki że jesli dam tam @JsonIgnore to zignoruje mi to w innym procesie który korzysta z VersionedAssortmentDto ;( . Pytanie czy da się to zignorować na potrzeby tej jednej metody porównywania Jsonów

0

Podejdzmy do tego z innej strony.

private boolean checkIfAssortmentMetadataChanged(VersionedMetadataDto currentVersion, VersionedMetadataDto lastVersion) {
String currentAssortmentJsonData = JSONSerializer.serializeToJSON(currentVersion);
        String lastVersionAssortmentJsonData = JSONSerializer.serializeToJSON(lastVersion);
 
        return  !StringUtils.equals(currentAssortmentJsonData, lastVersionAssortmentJsonData);
}

Jak widze to tak naprawde nie potrzebujesz tutaj zadnego JSONa. Po prostu porownaj te dwa DTO. Jesli nie przez EQUAL to jakims customowym comparatorem ktory bedzie dobry na ten przypadek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1