公開日:7/16/2022 更新日:7/16/2022
マスタ更新用のAPI開発で、リクエストパラメータにセットする更新用Beanに @JsonInclude(JsonInclude.Include.NON_NULL)
アノテーションを付与していた。
その際に、nullメンバだとJSONに表示されなくなるが、Optinal型の変数にOptinal.empty()を設定した場合、同様に表示されなくなるのか気になった。
Optional型のフィールドに Optinal.empty() を設定した場合、JSONから削除されず、null値が設定される。
検証を実施するために、以下の外部JARを公式サイトからダウンロードして参照ライブラリに設定した。
lombok.jar
jackson-annotations-2.12.7.jar
jackson-core-2.13.3.jar
jackson-databind-2.13.3.jar
dtoクラス
import java.util.Optional;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SampleDto {
private String name;
private Integer age;
private Optional <String> memo;
}
mainクラス
import java.util.Optional;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
public class Main {
public static void main(String[] args) throws JsonProcessingException{
SampleDto dto = new SampleDto("hoge",25,Optional.of("メモ"));
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Jdk8Module());
String json = mapper.writeValueAsString(dto);
System.out.println(json);
//JSON出力結果
//{"name":"hoge","age":25,"memo":"メモ"}
}
}
SampleDto dto = new SampleDto("hoge",25,null);
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Jdk8Module());
String json = mapper.writeValueAsString(dto);
System.out.println(json);
//JSON出力結果
//{"name":"hoge","age":25}
SampleDto dto = new SampleDto("hoge",25,Optional.empty());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new Jdk8Module());
String json = mapper.writeValueAsString(dto);
System.out.println(json);
//JSON出力結果
//{"name":"hoge","age":25,"memo":null}