如何在Java中将POJO转换为Map,反之亦然?

时间:2016-09-17 07:10:31

标签: java

我的用例是将任意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无关。

2 个答案:

答案 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)