这里的sourse 是实体类对象
field.getName() 获取实体类属性 name,sex,之类
Map<String, Object> sourceMap = mapper.convertValue(source, new TypeReference<Map<String, Object>>() {
});
把实体类转换成Map对象
Excel attr = field.getAnnotation(Excel.class);
attr.name() 获取@Excel name值
attr.targetAttr() 获取targetAttr值
@Excel(name = "照片",targetAttr = "latstImgPath")
private String latstImgPath; //近照
/**
* @Author:王梓宁
* @Date 2020/6/30 14:24
* 比较两个对象是否相同并获得不同的字段
*/
private static final ObjectMapper mapper = new ObjectMapper();
public static StringBuilder getModifyContent(Object source, Object target) {
Map<String, Object> modifies = new HashMap<>();
StringBuilder operDesc = new StringBuilder();
if (!Objects.equals(source.getClass().getName(), target.getClass().getName())) {
throw new CustomException("类型不匹配");
}
Map<String, Object> sourceMap = mapper.convertValue(source, new TypeReference<Map<String, Object>>() {
});
Map<String, Object> targetMap = mapper.convertValue(target, new TypeReference<Map<String, Object>>() {
});
Field[] allFields = source.getClass().getDeclaredFields();
for (Field field : allFields) {
Object sValue = sourceMap.get(field.getName());
Object tValue = targetMap.get(field.getName());
if (!Objects.equals(sValue, tValue)) {
Excel attr = field.getAnnotation(Excel.class);
if (attr != null) {
if (StringUtils.isNotBlank(attr.targetAttr())) {
operDesc.append(attr.name() + "变更;");
} else {
operDesc.append(attr.name() + "变更前:" + sValue + ",变更后:" + tValue + ";");
}
}
}
}
return operDesc;
}
比较两个对象是否相同并获得不同的字段。@Excel注解获取属性
最新推荐文章于 2024-06-14 18:05:53 发布