854 Stimmen

Wie kann man Jackson anweisen, ein Feld bei der Serialisierung zu ignorieren, wenn sein Wert null ist?

Wie kann Jackson so konfiguriert werden, dass der Wert eines Feldes bei der Serialisierung ignoriert wird, wenn der Wert dieses Feldes null ist?

Zum Beispiel:

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; 
}

5voto

acdcjunior Punkte 123383

Wenn in Spring Boot können Sie den Jackson anpassen ObjectMapper direkt über Eigenschaftsdateien.

Beispiel application.yml :

spring:
  jackson:
    default-property-inclusion: non_null # only include props if non-null

Mögliche Werte sind:

always|non_null|non_absent|non_default|non_empty

Mehr: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper

4voto

Bilal BBB Punkte 1134

Für Jackson 2.5 verwenden Sie :

@JsonInclude(content=Include.NON_NULL)

3voto

user3474985 Punkte 861

Wenn Sie versuchen, eine Liste von Objekten zu serialisieren, und eines davon ist null, werden Sie am Ende das Nullelement in das JSON aufnehmen, selbst wenn Sie mit

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

zur Folge haben wird:

[{myObject},null]

um dies zu erhalten:

[{myObject}]

kann man etwas tun wie:

mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
        @Override
        public void serialize(Object obj, JsonGenerator jsonGen, SerializerProvider unused)
                throws IOException
        {
            //IGNORES NULL VALUES!
        }
    });

TIPP: Wenn Sie DropWizard verwenden, können Sie die ObjectMapper von Jersey verwendet wird, das environment.getObjectMapper()

3voto

Xelian Punkte 15760

Globale Konfiguration, wenn Sie Spring verwenden

@Configuration
public class JsonConfigurations {

    @Bean
    public Jackson2ObjectMapperBuilder objectMapperBuilder() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
        builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
        builder.failOnUnknownProperties(false);
        return builder;
    }

}

2voto

prateek_cs_2012 Punkte 55

Dieses Problem beschäftigt mich schon seit geraumer Zeit, und ich habe endlich die Ursache gefunden. Das Problem war auf einen falschen Import zurückzuführen. Zuvor hatte ich mit

com.fasterxml.jackson.databind.annotation.JsonSerialize

Die veraltet war. Ersetzen Sie einfach den Import durch

import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;

und verwenden sie als

@JsonSerialize(include=Inclusion.NON_NULL)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X