比较两个对象是否相同并获得不同的字段。@Excel注解获取属性

    技术2022-07-11  118

    这里的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; }
    Processed: 0.015, SQL: 9