Domyślne zachowanie jackona wydaje się używać zarówno właściwości (pobierających i ustawiających), jak i pól do serializacji i deserializacji do json.
Chciałbym użyć tych pól jako kanonicznego źródła konfiguracji serializacji i dlatego nie chcę, aby Jackson w ogóle patrzył na właściwości.
Mogę to zrobić indywidualnie dla każdej klasy z adnotacją:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Ale nie chcę umieszczać tego na każdej klasie ...
Czy można to skonfigurować globalnie? Jak dodać trochę do Mapera obiektów?
INFER_PROPERTY_MUTATORS
flagę. Wymusza widoczność seterów, jeśli jest widoczny getter lub pole.Odpowiedzi:
Możesz skonfigurować poszczególnych ObjectMapperów w następujący sposób:
Jeśli chcesz ustawić globalnie, zwykle uzyskuję dostęp do skonfigurowanego mapera poprzez klasę opakowania.
źródło
withGetterVisibility
nie obejmujeis*
metod, ale jestwithIsGetterVisibility
dla nich.setVisibilityChecker
jest przestarzałe. UżyjsetVisibility
zamiast tego.W Jackson 2.0 i nowszych możesz po prostu użyć:
aby wyłączyć automatyczne wykrywanie.
źródło
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Następnie musisz opatrzyć adnotacjami każdą właściwość, którą chcesz dołączyć@JsonProperty
Specjalnie dla osób
boolean is*()
pobierających:Spędziłem dużo czasu na tym, dlaczego nie poniżej
ani to
pracował dla mojego Boolean Getter / Setter.
Rozwiązanie jest proste:
AKTUALIZACJA: Spring-boot dozwolone skonfigurować:
Zobacz Wspólne właściwości aplikacji # JACKSON
źródło
dla jackson 1.9.10 używam
włączyć automatyczne dedukcje.
źródło
Co powiesz na to: użyłem go z mixinem
obiekt niezgodny
Mixin:
Stosowanie:
Nic nie mówi, że nie można przewidzieć żadnej liczby klas i zastosować tego samego miksu.
Jeśli nie jesteś zaznajomiony z mixinami, są one po prostu koncepcyjnie: struktura mixin jest super narzucona klasie docelowej (według Jacksona, nie w odniesieniu do JVM).
źródło
Jeśli chcesz zrobić to globalnie, nie martwiąc się o konfigurację swojego
ObjectMapper
, możesz utworzyć własną adnotację:Teraz musisz po prostu adnotować swoje zajęcia
@JsonExplicit
i możesz iść!Przeprowadź także edycję powyższego wywołania, aby
@JsonAutoDetect
upewnić się, że masz ustawione wartości odpowiadające Twojemu programowi.Kredyt dla https://stackoverflow.com/a/13408807 dla pomagając mi dowiedzieć się o
@JacksonAnnotationsInside
źródło
Jeśli używasz Spring Boot, możesz skonfigurować Jackson globalnie w następujący sposób:
źródło