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

JSONSerialize (fasterxml.jackson) serializacja obiektu DTO bez klass dziedziczących
AL
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 7 lat
  • Postów:143
0

Witam, korzystam z JSONSerializer-a do serializacji stringa

Kopiuj
 
 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

Kopiuj
public class VersionedAssortmentDto extends VersionedMetadataDto 

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

SW
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 4 lata
  • Postów:426
2

Dla jacskona mozna zrobic tak:

Kopiuj
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
Kopiuj

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 :)

edytowany 2x, ostatnio: Swr
AL
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 7 lat
  • Postów:143
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

edytowany 1x, ostatnio: Altaro
SW
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 4 lata
  • Postów:426
0

Podejdzmy do tego z innej strony.

Kopiuj
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.

edytowany 1x, ostatnio: Swr

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.