我在jsonrpc4j中使用Jackson来访问远程服务。在我的Java应用程序中,没有为返回值定义的类,因此反序列化会生成通用的LinkedHashMaps。所以我不能在任何地方添加任何注释。 jsonrpc4j可以接受Jackson ObjectMapper对象。 远程服务使用结构化的json对象进行响应,其中一些字段是非常大的十进制数,而Jackson将它们视为双打。 示例对象可能如下所示
{"s1":"zxcvb","f1":20.00234,"a1":[{"f2":3883.99400943},{"f3":0.00093944432}]}
我希望它将所有数字解释为具有可配置精度的字符串或小数,并根据这些类型正确解析它们。 是否可以使用修改后的ObjectMapper对象执行此操作? 如果不是这样,最简单的方法是什么?
答案 0 :(得分:5)
我想我找到了: 在我第一次搜索时,我错过了Jackson序列化同时具有SerializationFeatures和DeserializationFeatures,它们有点不同。 根据{{3}},有一个名为USE_BIG_DECIMAL_FOR_FLOATS
的功能如果只有泛型类型描述(Object或Number,或者在无类型Map或Collection上下文中)可用,则确定是否要将JSON浮点数反序列化为BigDecimals的功能。
所以在我的情况下它基本上是
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
JsonRpcHttpClient rpcHttpClient = new JsonRpcHttpClient(
mapper,
new URL("the url"),
new HashMap<String, String>());