底层ObjectMapper
第一种
Map<String,Object> result = (Map<Sring,Object>)JsonUtils.jsonToObj(JsonUtils.objToJson(cafsOverdueCreaedTto,Map.class));
用的是ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
String value = objectMapper.writeValueAsString(enterpriseInfoDTO);
System.out.println(value);Map map = objectMapper.readValue(value, Map.class);
System.out.println("json字符串转对象"+map);EnterpriseInfoDTO enterpriseInfoDTO1 = objectMapper.convertValue(map, EnterpriseInfoDTO.class);
System.out.println("object等map转dto结果:"+enterpriseInfoDTO1);
第二种:
org.apache.commons.beanUtils包下面的:就是后面的给前面数据即B赋值给A;
BeanUtils.copyProperties(A,B)
org.springframework.beans.BeanUtils这个包下面的就是A赋值给B,并且可以指定忽略的哪些属性不赋值。
BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)
对source中null值会覆盖掉traget中的该字段的值,解决方法就是扩展方法
public static String[] getNoValuePropertyNames (Object source) {
Assert.notNull(source, "传递的参数对象不能为空");
final BeanWrapper beanWrapper = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = beanWrapper.getPropertyDescriptors();
Set<String> noValuePropertySet = new HashSet<>();
Arrays.stream(pds).forEach(pd -> {
Object propertyValue = beanWrapper.getPropertyValue(pd.getName());
if (CommonUtils.isNull(propertyValue)) {
noValuePropertySet.add(pd.getName());
} else {
if (Iterable.class.isAssignableFrom(propertyValue.getClass())) {
Iterable iterable = (Iterable) propertyValue;
Iterator iterator = iterable.iterator();
if (!iterator.hasNext()) noValuePropertySet.add(pd.getName());
}
if (Map.class.isAssignableFrom(propertyValue.getClass())) {
Map map = (Map) propertyValue;
if (map.isEmpty()) noValuePropertySet.add(pd.getName());
}
}
});
String[] result = new String[noValuePropertySet.size()];
return noValuePropertySet.toArray(result);
}
或者用
hutool开源库为我们提供了更为强大的Bean工具-BeanUtil,
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.1.14</version>
</dependency>
BeanUtil.copyProperties(oldDetail.get(),userDetail,true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
核心代码是CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true)
详情可以参考官方文档 http://hutool.mydoc.io/#text_319433 。
第三种:org.dozer.Mapper 所有属性包括id都会复制
Mapper mapper = new DozerBeanMapper();
mapper.map(cafsEnterpriseBase,CafsEnterpriseBaseHi.class);
JsonArray
JsonObject
*******************
[java] view plain copy print?
BeanUtils.copyProperties("要转换的类", "转换后的类");
[java] view plain copy print?
PropertyUtils.copyProperties("要转换的类", "转换后的类");