――Dieses Mal ist es der Titel ――Es ist ein relativ tippartiger Beitrag
――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.
--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ö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
}
Recommended Posts