识别 java POJO class 中更改的字段
Identifying changed fields in java POJO class
我有一个 java POJO class 有 10 多个成员。有一个 REST API 调用 save/update 数据到数据库 table。
对于更新调用,在验证不为空的 POJO class 成员后,仅将那些字段保存到 table。
我想记录正在更新的字段。但是不想在所有 10+ 个空检查块中添加日志语句。
if (POJOclass.getfield1() != null) {
daoObject.setfield1(POJOclass.getfield1());
}
if (POJOclass.getfield2() != null) {
daoObject.setfield2(POJOclass.getfield2());
}
非常感谢任何实施建议。
如果我理解正确,您可以使用自定义方法来检查非空字段和非空字段并记录它们(您可以根据需要自定义)
public static void StringNullOREmpty(Pojo po) {
Field[] f = po.getClass().getDeclaredFields();
Arrays.stream(f).forEach(i->{;
i.setAccessible(true); // need to be true to access private fields of pojo class
try {
if(i.get(po)!=null && !i.get(po).toString().trim().isEmpty()) {
System.out.println(i.get(po).toString()+" filed name "+i.getName());
}
} catch (IllegalArgumentException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
}
提交的示例 class:
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
class Pojo{
private String field1 = "hey";
private String field2 = "hello";
private Integer fiedl3=10;
private String field5;
private String field6 = "";
}
输出
hey filed name field1
hello filed name field2
10 filed name fiedl3
我有一个 java POJO class 有 10 多个成员。有一个 REST API 调用 save/update 数据到数据库 table。
对于更新调用,在验证不为空的 POJO class 成员后,仅将那些字段保存到 table。
我想记录正在更新的字段。但是不想在所有 10+ 个空检查块中添加日志语句。
if (POJOclass.getfield1() != null) {
daoObject.setfield1(POJOclass.getfield1());
}
if (POJOclass.getfield2() != null) {
daoObject.setfield2(POJOclass.getfield2());
}
非常感谢任何实施建议。
如果我理解正确,您可以使用自定义方法来检查非空字段和非空字段并记录它们(您可以根据需要自定义)
public static void StringNullOREmpty(Pojo po) {
Field[] f = po.getClass().getDeclaredFields();
Arrays.stream(f).forEach(i->{;
i.setAccessible(true); // need to be true to access private fields of pojo class
try {
if(i.get(po)!=null && !i.get(po).toString().trim().isEmpty()) {
System.out.println(i.get(po).toString()+" filed name "+i.getName());
}
} catch (IllegalArgumentException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
}
提交的示例 class:
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
class Pojo{
private String field1 = "hey";
private String field2 = "hello";
private Integer fiedl3=10;
private String field5;
private String field6 = "";
}
输出
hey filed name field1
hello filed name field2
10 filed name fiedl3