Używam Jacksona do konwersji mojego obiektu do JSON. Obiekt posiada 2 pola:
@Entity
public class City {
@id
Long id;
String name;
public String getName() { return name; }
public void setName(String name){ this.name = name; }
public Long getId() { return id; }
public void setName(Long id){ this.id = id; }
}
Ponieważ chcę używać tego z funkcją automatycznego uzupełniania jQuery, chcę, aby „identyfikator” pojawiał się jako „wartość” w pliku json, a „nazwa” jako „etykieta”. Dokumentacja Jacksona nie jest w tym jasna i wypróbowałem każdą adnotację, która nawet zdalnie wydaje się, że robi to, czego potrzebuję, ale nie mogę name
pojawić się jako label
i id
pojawiać się tak, jak value
w json.
Czy ktoś wie, jak to zrobić, czy jest to możliwe?
Odpowiedzi:
Czy próbowałeś używać @JsonProperty?
źródło
@JsonProperty(value="label")
i nie działało, wypróbowałem to, jak sugerowałeś i działa! dzięki stary, to naprawdę pomoże teraz uprościć kod.Pamiętaj, że
org.codehaus.jackson.annotate.JsonProperty
w Jackson 1.xicom.fasterxml.jackson.annotation.JsonProperty
w Jackson 2.x. Sprawdź, którego ObjectMappera używasz (z jakiej wersji) i upewnij się, że używasz właściwej adnotacji.źródło
org.json4s.jackson
przestrzeń nazw. :) i ewentualnie inne implementacjejackson
YMMV.Jest jeszcze jedna opcja zmiany nazwy pola:
Jackson MixIns .
Przydatne, jeśli masz do czynienia z klasami osób trzecich, do których nie możesz dodać adnotacji lub po prostu nie chcesz zanieczyszczać klasy adnotacjami specyficznymi dla Jacksona.
Dokumentacja Jacksona dotycząca Mixins jest nieaktualna, więc ten przykład może zapewnić większą przejrzystość. W skrócie: tworzysz klasę mixin, która wykonuje serializację tak, jak chcesz. Następnie zarejestruj go w ObjectMapper:
źródło
Jackson
Jeśli używasz Jacksona, możesz użyć
@JsonProperty
adnotacji, aby dostosować nazwę danej właściwości JSON.W związku z tym wystarczy
@JsonProperty
dodać adnotacje do pól encji adnotacją i podać niestandardową nazwę właściwości JSON, na przykład:JavaEE lub JakartaEE JSON-B
JSON-B to standardowa warstwa powiązania do konwersji obiektów Java do iz formatu JSON. Jeśli używasz formatu JSON-B, możesz zastąpić nazwę właściwości JSON za pomocą
@JsonbProperty
adnotacji:źródło