/ / Niestandardowe serializowane i deserializowane nazwy pól z lombok - json, jackson, lombok

Niestandardowe serializowane i deserializowane nazwy pól za pomocą lombok - json, jackson, lombok

Czy istnieje sposób na określenie różnych zserializowanych / zserializowanych nazw pól JSON bez konieczności jawnego wypisywania zarówno metod pobierających, jak i ustawiających, być może za pomocą pobierających i ustawiających lombok?

Podobnie jak to przykład, poniższy kod pozwala na przekształcenie przychodzącego JSON w inną nazwę pola POJO. Powoduje również serializację nazwy pola POJO, ponieważ:

public class PrivacySettings {
private String chiefDataOfficerName;

@JsonProperty("CDO_Name__c")
private void setChiefDataOfficerName(String chiefDataOfficerName) {
this.chiefDataOfficerName = chiefDataOfficerName;
}

@JsonProperty("chiefDataOfficerName")
private String getChiefDataOfficerName() {
return chiefDataOfficerName;
}
}

To wydaje się pełne, ale nie byłem w stanieweź to do pracy z @Getter i @Setter. Widziałem, że Jackson obsługuje @JsonAlias, co prawdopodobnie pomogłoby w tym konkretnym przykładzie, ale muszę też serializować pod inną nazwą.

Wydaje się, że to powinno być bardzo proste, coś w stylu:

@Getter
@Setter
public class PrivacySettings {
@JsonSetter("CDO_Name__c")
@JsonGetter("chiefDataOfficerName")
private String chiefDataOfficerName;
}

Ale to oczywiście nie jest poprawne.

Odpowiedzi:

1 dla odpowiedzi № 1

Szczególnie nie widzę nic złego w przypadku gettera i setera w tej sytuacji.


Jeśli jednak chcesz spróbować, ponieważ Lombok v0.11.8 obsługuje funkcja eksperymentalna dodawać adnotacje do generowanych obiektów pobierających i ustawiających. Zobacz dokumentacja:

Aby umieścić adnotacje na wygenerowanej metodzie, możesz użyć onMethod=@__({@AnnotationsHere}); aby umieścić adnotacje na jedynym parametrze wygenerowanej metody ustawiającej, możesz użyć onParam=@__({@AnnotationsHere}). Uważaj jednak! To jest funkcja eksperymentalna. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją dotyczącą onX cecha.

Składnia tej funkcji zależy od wersji JDK. W przypadku JDK 8 będziesz mieć:

public class PrivacySettings {

@Setter(onMethod_ = { @JsonSetter("CDO_Name__c") })
@Getter(onMethod_ = { @JsonGetter("chiefDataOfficerName") })
private String chiefDataOfficerName;
}

W przypadku JDK 7 składnia jest następująca:

public class PrivacySettings {

@Setter(onMethod = @__({ @JsonSetter("CDO_Name__c") }))
@Getter(onMethod = @__({ @JsonGetter("chiefDataOfficerName") }))
private String chiefDataOfficerName;
}

Aby uzyskać więcej informacji, zapoznaj się z @Getter i @Setter dokumentacja. Zobacz także to odpowiedź po szczegóły @__.