Como Jackson pode ser configurado para ignorar um valor de campo durante a serialização, se o valor desse campo for nulo.
Por exemplo:
public class SomeClass {
// what jackson annotation causes jackson to skip over this value if it is null but will
// serialize it otherwise
private String someValue;
}
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
:; de alguma forma, sua anotação não estava disponível.@JsonInclude
notação não funcionar, mas isso funciona como um encanto:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
(estou usando Jackson 1.9.12 com Spring 3.2.2.)@JsonSerialize
sintaxe para@JsonInclude
. A sintaxe mais antiga está obsoleta.Com Jackson> 1.9.11 e <2.x, use a
@JsonSerialize
anotação para fazer isso:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
fonte
@JsonSerialize(using = FooSerializer.class, include = JsonSerialize.Inclusion.NON_NULL)
não funciona valores anuláveis são serializados.Apenas para expandir as outras respostas - se você precisar controlar a omissão de valores nulos em uma base por campo, anote o campo em questão (ou, em alternativa, anote o 'getter' do campo).
exemplo - aqui somente
fieldOne
será omitido do json se for nulo.fieldTwo
sempre será incluído, independentemente de ser nulo.Para omitir todos os valores nulos na classe como padrão, anote a classe. As anotações por campo / obturador ainda podem ser usadas para substituir esse padrão, se necessário.
exemplo - aqui
fieldOne
efieldTwo
será omitido de json se eles forem nulos, respectivamente, porque esse é o padrão definido pela anotação de classe.fieldThree
no entanto, substituirá o padrão e sempre será incluído, devido à anotação no campo.ATUALIZAR
O acima é para Jackson 2 . Para versões anteriores do Jackson, você precisa usar:
ao invés de
Se essa atualização for útil, faça o upvote da resposta do ZiglioUK abaixo, ela apontou a anotação mais recente do Jackson 2 muito antes de eu atualizar minha resposta para usá-la!
fonte
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
está obsoletoNo Jackson 2.x, use:
fonte
com.fasterxml.jackson.annotation
- Jackson 1.x tinhaorg.codehaus.jackson.annoation
Você pode usar a seguinte configuração do mapeador:
Desde o 2.5, você pode usar:
fonte
getSerializationConfig()
diz:Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
mapper.setSerializationInclusion(Include.NON_NULL);
Você pode definir
application.properties
:ou
application.yaml
:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
fonte
No meu caso
fez funcionar.
fonte
{ }
null, que transfere inutilmente um idioma Java para o consumidor. O mesmo acontece com o AtomicReference - o consumidor não se importa com o modo como o desenvolvedor optou por impor a segurança do thread na representação interna da resposta.Deveria trabalhar.
Include.NON_EMPTY
indica que a propriedade é serializada se seu valor não for nulo e não estiver vazio.Include.NON_NULL
indica que a propriedade é serializada se seu valor não for nulo.fonte
JsonInclude.Include.NON_EMPTY
- é suficiente, uma vez que cobre caso NOT_NULLSe você deseja adicionar esta regra a todos os modelos no Jackson 2.6+, use:
fonte
Se no Spring Boot , você pode personalizar o jackson
ObjectMapper
diretamente através dos arquivos de propriedades.Exemplo
application.yml
:Os valores possíveis são:
Mais: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
fonte
Isso funcionará nas inicializações Spring 2.0.3+ e Jackson 2.0+
fonte
@JsonInclude(JsonInclude.Include.NON_NULL)
trabalhou para mim em Primavera arrancar 2.1.2 e Jackson anotações 2.9.0Para o Jackson 2.5, use:
fonte
Isso está me incomodando há algum tempo e finalmente encontrei o problema. O problema ocorreu devido a uma importação incorreta. Antes eu estava usando
O qual foi preterido. Basta substituir a importação por
e use-o como
fonte
Configuração global se você usar o Spring
fonte
public Jackson2ObjectMapperBuilder serializationInclusion(JsonInclude.Include serializationInclusion) { this.serializationInclusion = serializationInclusion; return this; }
; Deve-se usar o raio maior da enumeração de inclusão. por exemplo, NON_ABSENT inclui NON_NULL e NON_EMPTY inclui ambos. Por isso, só deve ser obuilder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
JacksonInclude doc #Se você estiver tentando serializar uma lista de objetos e um deles for nulo, você acabará incluindo o item nulo no JSON, mesmo com
vai resultar em:
para conseguir esta:
pode-se fazer algo como:
DICA: Se você estiver usando o DropWizard, poderá recuperar o que
ObjectMapper
está sendo usado por Jersey usandoenvironment.getObjectMapper()
fonte
Temos muitas respostas para essa pergunta. Esta resposta pode ser útil em alguns cenários. Se você deseja ignorar os valores nulos, pode usar o NOT_NULL no nível da classe. como abaixo
Às vezes, você pode precisar ignorar os valores vazios, como você pode ter inicializado o arrayList, mas não há elementos nessa lista. Nesse período, usando a anotação NOT_EMPTY para ignorar esses campos de valores vazios
fonte
Jackson 2.x + use
fonte
.withSerializationInclusion(JsonInclude.Include.NON_NULL)
em vez disso, certo?getSerializationConfig()
diz:Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
Além disso, você deve alterar sua abordagem ao usar o Map myVariable, conforme descrito na documentação para eliminar nulos:
fonte
Caso um
Caso dois
Se
someString
for nulo, será ignorado nos dois casos. SesomeString
estiver "", apenas será ignorado no caso dois.O mesmo para
List = null
ouList.size() = 0
fonte