O comportamento padrão do jackon parece usar as propriedades (getters e setters) e os campos para serializar e desserializar para json.
Eu gostaria de usar os campos como a fonte canônica de configuração de serialização e, portanto, não quero que o jackson veja as propriedades.
Eu posso fazer isso em uma classe individual com a anotação:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Mas não quero colocar isso em todas as aulas ...
É possível configurar isso globalmente? Como adicionar alguns ao Mapeador de Objetos?
INFER_PROPERTY_MUTATORS
bandeira. Força a visibilidade dos levantadores se houver um campo ou getter visível.Respostas:
Você pode configurar ObjectMappers individuais como este:
Se você deseja defini-lo globalmente, geralmente acesso um mapeador configurado por meio de uma classe de wrapper.
fonte
withGetterVisibility
não cobreis*
métodos, mas existewithIsGetterVisibility
para eles.setVisibilityChecker
está obsoleto. Use emsetVisibility
vez disso.No Jackson 2.0 e posterior, você pode simplesmente usar:
para desativar a detecção automática.
fonte
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Em seguida, você tem que anotar cada propriedade que deseja incluir com@JsonProperty
Especificamente para
boolean is*()
getters:Passei muito tempo explicando por que nem abaixo
nem isso
Trabalhei para o meu Boolean Getter / Setter.
A solução é simples:
UPDATE: inicialização por mola permitida configurá-lo:
Consulte Propriedades comuns do aplicativo # JACKSON
fonte
para jackson 1.9.10 eu uso
para desativar a dedução automática.
fonte
Que tal isso: eu usei com um mixin
objeto não compatível
Mixin:
Uso:
Não há nada que diga que você não pode participar de qualquer número de classes e aplicar o mesmo mixin.
Se você não estiver familiarizado com mixins, eles são conceitualmente simples: A estrutura do mixin é super-imposta sobre a classe alvo (de acordo com Jackson, não tão longe como a JVM está em causa).
fonte
Se você quiser uma maneira de fazer isso globalmente sem se preocupar com a configuração da sua
ObjectMapper
, poderá criar sua própria anotação:Agora você só precisa anotar suas aulas
@JsonExplicit
e pronto!Lembre-se também de editar a chamada acima
@JsonAutoDetect
para garantir que você tenha os valores definidos para o que funciona com o seu programa.Agradecemos a https://stackoverflow.com/a/13408807 por me ajudar a descobrir sobre
@JacksonAnnotationsInside
fonte
Se você usa o Spring Boot, pode configurar o Jackson globalmente da seguinte maneira:
fonte