【发布时间】:2017-06-07 09:08:21
【问题描述】:
我们正在使用 Jackson 从文件系统中读取 json 并将其解析到 POJO。
POJO
String name;
Map<String,Object> map;
getters/setters
阅读
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
Pojo obj = mapper.readValue(jsonFile, Pojo.class);
问题
当我们在 json(地图部分)中有数字时,它们会被转换为 Integer 或 Double。我们希望我们所有的数字(小数和整数)作为类型 BigDecimal 所以我尝试使用
mapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
但这仅适用于十进制数。没有可用于将整数转换为 BigDecimal 的功能。
问题
- 我们是否有任何内置功能可以让 ObjectMapper 将所有数字读取到 BigDecimal?
- 如果我需要编写自定义序列化程序,我需要为整个类编写它还是可以为 Map 字段编写它?
【问题讨论】:
-
USE_BIG_INTEGER_FOR_INTS是否足够接近? -
嗨,感谢您的快速响应,我尝试使用它,但它会将数字转换为 BgInteger,因为我们需要 BigDecimal。
-
确实如此。出于兴趣,您为什么需要它们是 BigDecimal?
-
当然,但如果它们实际上是整数值,那么
BigInteger就足以处理任意位数。 -
我的意思是:为什么有些值是
BigDecimal而有些是BigInteger,这有什么关系?