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 № 1Szczegó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 @__
.