私は Jackson を使用して、フィールドとして Optional を持つクラス値を JSON に書き込もうとしていました:
public class Test {
Optional<String> field = Optional.of("hello, world!");
public Optional<String> getField() {
return field;
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Test()));
}
}
このクラスを実行すると、次の出力が生成されます。
{"field":{"present":true}}
存在/不在フィールドが含まれていることは理解しており、JSON データの読み取り時にこれを回避できますが、オプションの実際の内容が出力に書き込まれないという事実を回避することはできません。:(
ObjectMapper をまったく使用しない以外に回避策はありますか?
ベストアンサー1
使用できるジャクソン-データ型-jdk8次のように説明されます:
Optionalなどの新しいJDK8固有の型のサポート
これを行うためには:
com.fasterxml.jackson.datatype:jackson-datatype-jdk8
依存関係として追加する- モジュールをオブジェクト マッパーに登録します。
objectMapper.registerModule(new Jdk8Module());