【问题标题】:Identifying changed fields in java POJO class识别 java POJO 类中更改的字段
【发布时间】:2018-12-11 16:14:21
【问题描述】:

我有一个包含 10 多个成员的 java POJO 类。有一个 REST API 调用可将数据保存/更新到数据库表。

对于更新调用,在验证不为空的 POJO 类成员之后,仅将这些字段保存到表中。

我想记录正在更新的字段。但不想在所有 10+ 空检查块中添加日志语句。

                if (POJOclass.getfield1() != null) {
                    daoObject.setfield1(POJOclass.getfield1());
                }

                if (POJOclass.getfield2() != null) {
                    daoObject.setfield2(POJOclass.getfield2());
                }

非常感谢任何有关实施的建议。

【问题讨论】:

  • 看看像mapstruct这样的映射器,比较你通过api得到的对象和代表当前数据库状态的对象。

标签: java dao getter-setter pojo


【解决方案1】:

如果我理解正确,您可以使用自定义方法来检查非空字段和非空字段并记录它们(您可以根据需要自定义)

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();
    }
    });

}

示例归档类:

@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

【讨论】:

  • 谢谢,这对我有用。但还有一件事是,我在 Pojo 中有另一个 Pojo 类。学生对象内的地址对象(属性:第一行,第二行,zip等)。
猜你喜欢
  • 2021-11-30
  • 2016-08-11
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多