Cra*_*ray 2 java json numbers jackson deserialization
我在jsonrpc4j中使用Jackson来访问远程服务.在我的Java应用程序中,没有为返回值定义的类,因此反序列化会生成通用的LinkedHashMaps.所以我不能在任何地方添加任何注释.jsonrpc4j可以接受Jackson ObjectMapper对象.远程服务使用结构化的json对象进行响应,其中一些字段是非常大的十进制数,而Jackson将它们视为双打.示例对象可能如下所示
{"s1":"zxcvb","f1":20.00234,"a1":[{"f2":3883.99400943},{"f3":0.00093944432}]}
Run Code Online (Sandbox Code Playgroud)
我希望它将所有数字解释为具有可配置精度的字符串或小数,并根据这些类型正确解析它们.是否可以使用修改后的ObjectMapper对象执行此操作?如果不是这样,最简单的方法是什么?
我想我发现了:在我第一次搜索时,我错过了Jackson序列化同时具有SerializationFeatures和DeserializationFeatures,它们有点不同.根据http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/DeserializationFeature.html,有一个名为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>());
Run Code Online (Sandbox Code Playgroud)