final ObjectMapper mapper = new ObjectMapper();
final MyPojo<MyGenericType> pojo = mapper.convertValue(map, new TypeReference<MyPojo<MyGenericType>>() {});
你也可以用它把pojo转换成java.util.Map。
final ObjectMapper mapper = new ObjectMapper();
final Map<String, Object> map = mapper.convertValue(pojo, new TypeReference<Map<String, Object>>() {});
ObjectMapper objectMapper = new ObjectMapper();
// Use this if all properties are not in the class
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
final MyPojo pojo = objectMapper.convertValue(map, MyPojo.class);
9条答案
按热度按时间vatpfxk51#
好吧,你也可以用Jackson来实现这一点。(而且自从你考虑用Jackson以来,这似乎更舒服)。
使用
ObjectMapper
的convertValue
方法:不需要转换成JSON字符串或其他东西;直接转换要快得多。
2fjabf4q2#
采用Gson的解决方案:
6tdlim6h3#
如果类中有泛型类型,则应将
TypeReference
与convertValue()
一起使用。你也可以用它把pojo转换成
java.util.Map
。3duebb1j4#
和第一个答案一样,但是我得到了一个错误,因为我不想把Map的所有属性都转换成这个类,我还找到了
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
作为解决方案。b09cbbtk5#
是的,完全可以避免中间的JSON转换。使用像Dozer这样的深度复制工具,您可以直接将Map转换为POJO。下面是一个简单的示例:
POJO示例:
转换代码示例:
输出:
[ID = 5,姓名=鲍勃,年龄= 23,储蓄= 2500.39]
注意:如果你将源Map更改为
Map<String, Object>
,那么你可以复制任意深度嵌套的属性(使用Map<String, String>
你只能得到一层)。qaxu7uf26#
我已经测试了Jackson和BeanUtils,发现BeanUtils要快得多。
在我的机器(Windows8.1,JDK1.7)中,我得到了这个结果。
lx0bsm1f7#
到目前为止,使用Jackson提供的答案非常好,但您仍然可以使用一个 util 函数来帮助您 * 转换 * 不同的
POJO
,如下所示:kiayqfof8#
将Map转换为POJO示例。注意Map键包含下划线,字段变量为驼峰。
用户类POJO
App.class测试该示例
xriantvc9#
@Hamedz如果使用许多数据,使用Jackson转换光数据,使用apache...测试用例: