我的用例是将任意POJO转换为Map并从Map转换回POJO。所以我最终使用策略POJO - > json - > org.bson.Document并返回org.bson.Document - > json - > POJO。
我正在使用gson将POJO转换为json,
Gson gson = new GsonBuilder().create();
String json = gson.toJson(pojo);
然后
Document doc = Document.parse(json);
创建文档很容易。但其他方式是有问题的。 document.toJson()
没有为long,timestamp等提供标准json,并且gson在反序列化为POJO时抱怨。所以我需要一种方法将org.bson.Document转换为标准的json。
注意:我想避免使用mongo java驱动程序或morphia,因为这项工作无论如何都与mongo无关。
答案 0 :(得分:24)
我的用例是将任意POJO转换为Map并从Map转换回POJO。
你可以使用Jackson,一种流行的Java JSON解析器:
ObjectMapper mapper = new ObjectMapper();
// Convert POJO to Map
Map<String, Object> map =
mapper.convertValue(foo, new TypeReference<Map<String, Object>>() {});
// Convert Map to POJO
Foo anotherFoo = mapper.convertValue(map, Foo.class);
根据Jackson documentation,此方法在功能上类似于首先将给定值序列化为JSON,然后将JSON数据绑定到给定类型的值,但应该更高效,因为完全序列化不需要(需要)发生。但是,相同的转换器(序列化器和反序列化器)将用于数据绑定,这意味着相同的对象映射器配置可以正常工作。
答案 1 :(得分:2)
更简单,您可以使用PropertyUtils.describe(Object o)