项目中遇到一个修改的需求,前端传实体类过来,然后需要标注那些是被修改的,此时就需要查询后端,然后跟前端传过来的实体做对比,并记录;修改的时候还要记录哪些属性值被修改,,哪些属性值没被修改,修改前与修改后;刚开始想逐个循环比较,后来想到可以用反射获取属性值,然后再通过注解获取到属性备注,话不多说,上代码;(var1实体类必须加上注解@ApiModelProperty,用于备注字段,var2不做要求)
public class Reflect { public static JSONObject compare(Object var1, Object var2) throws IllegalAccessException { StringBuilder builder = new StringBuilder("修改了:"); boolean flag = false; Field[] declaredFields = var1.getClass().getDeclaredFields(); Field[] declaredFields2 = var2.getClass().getDeclaredFields(); for (Field declaredField : declaredFields) { declaredField.setAccessible(true); String name = declaredField.getName(); for (Field field : declaredFields2) { field.setAccessible(true); if (name.equals(field.getName())){ if (!declaredField.get(var1).equals(field.get(var2))){ flag = true; String value = declaredField.getAnnotation(ApiModelProperty.class).value(); builder.append(value).append(",修改前为:").append(declaredField.get(var1)).append(",修改后为:") .append(field.get(var2)).append(";"); } } } } if (flag){ return new JSONObject().fluentPut("isModification",true).fluentPut("msg",builder.toString()); } return new JSONObject().fluentPut("isModification",false).fluentPut("msg","未修改"); } }