前言
采用的mongoDB驱动和JSON库的版本为: fastjson-1.2.62.jar mongo-java-driver-3.12.3.jar
问题
MongoDB中存放的Int64位
点进去保存如下:
多出一个NumberLong
java通过如下方式取出MongoDB记录
String qJson=arr.get(i).toJson();
RecvHead recvHead = JSONObject.parseObject(qJson, RecvHead.class);
对应的json数据是这样的:
{"_id": {"$oid": "61e962668f430000ea005172"}, "URI": "//DB1022/BpTran/AgentPr/SERVER001", "Name": "计算机监控信息", "Status": "1", "Type": "AGENT", "reportTime": {"$numberLong": "1642778481656"}}
很明显,这样直接转为RecvHead对象,程序会报错
原因,就是reportTime的值自动加上了$numberLong,因此,需要进一步处理
JsonWriterSettings build = JsonWriterSettings.builder()
.outputMode(JsonMode.EXTENDED)
.int64Converter((Long value, StrictJsonWriter writer)->writer.writeString(Long.toString(value)))
.int32Converter((Integer value, StrictJsonWriter writer) ->writer.writeNumber(Integer.toString(value)))
.build();
String qJson=arr.get(i).toJson(build);
RecvHead recvHead = JSONObject.parseObject(qJson, RecvHead.class);
结果:
{"_id": {"$oid": "61e962668f430000ea005172"}, "URI": "//DB1022/BpTran/AgentPr/SERVER001", "Name": "计算机监控信息", "Status": "1", "Type": "AGENT", "reportTime": "1642778481656"}
正确。
|