jsonをMapとして読み込んだ時のデフォルトのデータ型を変更する方法。
読み込むjson
{
"number": 123456789012,
"decimal": 1.1
}
デフォルトの設定で読み込んだ結果
こんな結果になる。整数の場合は、読み込む内容によってIntegerに変わったりします。
result = {number=123456789012, decimal=1.1}
number = java.lang.Long
decimal = java.lang.Double
データ型を変更する
下のようにUSE_BIG_INTEGER_FOR_INTSとUSE_BIG_DECIMAL_FOR_FLOATSを有効にします。
objectMapper.enable(DeserializationFeature.USE_BIG_INTEGER_FOR_INTS);
objectMapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
変更後の読み込んだ結果
result = {number=123456789012, decimal=1.1}
number = java.math.BigInteger
decimal = java.math.BigDecimal
読み込みコードの全体
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.USE_BIG_INTEGER_FOR_INTS);
objectMapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
final TypeFactory factory = objectMapper.getTypeFactory();
final Map result =
objectMapper.readValue(inputStream, factory.constructType(Map.class));
System.out.println("result = " + result);
outputType(result, "number");
outputType(result, "decimal");