So verbergen Sie Nullfelder als Antwort in Java

Einführung

――Dieses Mal ist es der Titel ――Es ist ein relativ tippartiger Beitrag

Hintergrund

――Wenn ich Api erstellt habe, dachte ich, dass es keine Möglichkeit gibt, jeden Schlüsselnamen aus Response zu löschen, wenn es ein Feld mit null Inhalten gibt. Deshalb werde ich zusammenfassen, was ich ein wenig untersucht habe.

Was du vorbereitet hast

sofort

--Versuchen Sie, eine geeignete DTO-Klasse zu erstellen

HelloDto.java


public class HelloDto {

    private String name;

    private Integer age;

    private String address;

    //Getter und Konstruktor weggelassen

}

HelloController.java


public class HelloController {

    public HelloDto getHello() {
        return new HelloDto("tom", 21, null);
    }
}

――Um dieses Mal, wenn ich versuche, die Antwort von HelloDto zu erhalten, sieht es so aus

hello.json


{
  "name": "tom",
  "age": 21,
  "address": null
}

――Was ist in diesem Fall, wenn Sie die Adresse zusammen mit dem Schlüsselnamen löschen möchten? ―― Übrigens, selbst wenn Sie einen Konstruktor mit unterschiedlichen Argumenten vorbereiten, war dies nutzlos, da die Antwort mit null gefüllt und nicht zurückgegeben wurde.

Lösung

--Lösen Sie mit Jackson-Anmerkungen

HelloDto.java


public class HelloDto {

    private String name;

    private Integer age;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String address;

    //Getter und Konstruktor weggelassen

}

hello.json


{
  "name": "tom",
  "age": 21
}

JsonInclude.java



        /**
         * Value that indicates that only properties with non-null
         * values are to be included.
         */
        NON_NULL,

        /**
         * Value that indicates that only properties with null value,
         * or what is considered empty, are not to be included.
         * Definition of emptiness is data type specific; see below
         * for details on actual handling.
         *<p>
         * Default emptiness for all types includes:
         *<ul>
         * <li><code>Null</code> values.</li>
         * <li>"Absent" values (see {@link #NON_ABSENT})</li>
         *</ul>
         * so that as baseline, "empty" set includes values that would be
         * excluded by both {@link #NON_NULL} and {@link #NON_ABSENT}.
         *<br>
         * Beyond this base, following types have additional empty values:
         *<ul>
         * <li>For {@link java.util.Collection}s and {@link java.util.Map}s,
         *    method <code>isEmpty()</code> is called;
         *   </li>
         * <li>For Java arrays, empty arrays are ones with length of 0
         *   </li>
         * <li>For Java {@link java.lang.String}s, <code>length()</code> is called,
         *   and return value of 0 indicates empty String
         *   </li>
         * </ul>
         *  and for other types, null values are excluded but other exclusions (if any).
         *<p>
         * Note that this default handling can be overridden by custom
         * <code>JsonSerializer</code> implementation: if method <code>isEmpty()</code>
         * is overridden, it will be called to see if non-null values are
         * considered empty (null is always considered empty).
         *<p>
         * Compatibility note: Jackson 2.6 included a wider range of "empty" values than
         * either earlier (up to 2.5) or later (2.7 and beyond) types; specifically:
         *<ul>
         * <li>Default values of primitive types (like <code>0</code> for `int`/`java.lang.Integer`
         *  and `false` for `bool`/`Boolean`)
         *  </li>
         * <li>Timestamp 0 for date/time types
         *  </li>
         *</ul>
         * With 2.7, definition has been tightened back to only containing types explained
         * above (null, absent, empty String, empty containers), and now
         * extended definition may be specified using {@link #NON_DEFAULT}.
         */
        NON_EMPTY,
    

――NON_EMPTY kann zusätzlich zur Beurteilungsbedingung von NON_NULL auch dann abgespielt werden, wenn es null zu sein scheint, und es kann auch in Sammlungen verwendet werden. Abgesehen von dem Fall, in dem ich nur null spielen möchte, denke ich, dass NON_EMPTY in Ordnung ist ... ―― Übrigens können Sie es als Klassenanmerkung verwenden, ohne es an jedes Feld anzuhängen.

HelloDto.java


@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class HelloDto {

    private String name;

    private Integer age;

    private String address;

    private List<String> friends;

    public HelloDto(String name, Integer age, String address, List<String> friends) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.friends = friends;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }

    public List<String> getFriends() {
        return friends;
    }
}

»Anrufer so

HelloController.java



public class HelloController {

    public HelloDto getHello() {
        return new HelloDto("tom", 21, null, new ArrayList<>());
    }
}

hello.json


{
  "name": "tom",
  "age": 21
}

Zusammenfassung

Referenzierte Site

Recommended Posts

So verbergen Sie Nullfelder als Antwort in Java
So blenden Sie die Bildlaufleiste in WebView aus
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
So verketten Sie Zeichenfolgen mit Java
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
So führen Sie eine Basiskonvertierung in Java durch
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
So erhalten Sie das Datum mit Java
[Java] So testen Sie, ob es in JUnit null ist
So zeigen Sie eine Webseite in Java an
So erhalten Sie eine Klasse von Element in Java
So lösen Sie Ausdrucksprobleme in Java
Wie schreibe ich Java String # getBytes in Kotlin?
So greifen Sie auf Java Private-Methoden und -Felder zu
Aufrufen von Funktionen in großen Mengen mit Java Reflection
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
Wie kann ich IBM Mainframe-Dateien in Java eingeben / ausgeben?
So erstellen Sie einen Daten-URI (base64) in Java
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So konvertieren Sie eine Datei in ein Byte-Array in Java
So verwalten Sie Java EE-Projekte in Eclipse
Zusammenfassung der Implementierung von Standardargumenten in Java
Wie man modernes Java schreibt. Unveränderliches Java, Null Betrachten Sie die Sicherheit.
Wie man altes Java (8er) in macOS 10.15 Catalina einfügt
Hinweise zur Verwendung regulärer Ausdrücke in Java
So senken Sie die Java-Version
[Java] Verwendung von Map
So deinstallieren Sie Java 8 (Mac)
Verwendung von Java Optional
So minimieren Sie Java-Images
Wie schreibe ich einen Java-Kommentar
So verbergen Sie args4j default
Verwendung der Java-Klasse
[Java] Verwendung von removeAll ()
[Java] So zeigen Sie Wingdings an
Verwendung von Java Map
So legen Sie Java-Konstanten fest
Verwendung von Java-Variablen
So konvertieren Sie Java Base
[Java] So implementieren Sie Multithreading
So initialisieren Sie ein Java-Array
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
So lesen Sie Ihre eigene YAML-Datei (*****. Yml) in Java
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Aufrufen und Verwenden der API in Java (Spring Boot)
Verwendung des Java-Aufzählungstyps (Enum) in Mapper XML von MyBatis
Dynamisches Wechseln von JDKs beim Erstellen von Java mit Gradle
So entwickeln und registrieren Sie eine Sota-App in Java
So simulieren Sie das Hochladen von Post-Object-Formularen in OSS in Java
So stellen Sie eine Java-Anwendung in Alibaba Cloud EDAS in Eclipse bereit