【问题标题】:Javers Compare Fields with AnnotationsJavers 将字段与注释进行比较
【发布时间】:2019-02-18 18:11:43
【问题描述】:

我有一个 Java 8/Maven/Spring Boot 项目。我正在使用 Javers 审核我的应用程序中的更改,但是我创建了一个自定义注释,它放置在类中的字段上方,如果更改,我希望对其进行审核。这是一个示例类:

public class Foo {
  @AuditThis
  private final String someString;
  private final int someInt;
  @AuditThis
  private final double someDouble;
  private final long someLong;
  @AuditThis
  private final List<String> someList;
}

调用javers.compare(foo1, foo2) 时,我希望它只比较带有注释@AuditThis 的字段。因此,在这种情况下,它只会比较 Foo 对象的 someStringsomeDoublesomeList 字段。

我知道你可以设置一个自定义比较器,所以我尝试做这样的事情:

public class AuditThisComparator implements CustomPropertyComparator<Object, ValueChange> {
   @Override
   public ValueChange compare(final Object left,
                              final Object right,
                              final GlobalId globalId,
                              final Property property) {
       ValueChange change = null;

       Field[] leftFields = left.getClass().getDeclaredFields();
       Field[] rightFields = right.getClass().getDeclaredFields();

       int upperBound = leftFields.length;
       for (int i = 0; i < upperBound; i++) {
           if (return i < leftFields.length && leftFields[i].getAnnotation(AuditThis.class) != null) {
               change = new ValueChange(globalId, property.getName(), left, right);
               break;
           }
       }

       return change;
   }
}

然后像这样注册:

Javers javers = JaversBuilder.javers()
                             .registerCustomComparator(new AuditThisComparator(), Object.class)
                             .build();

但是当我执行.compare() 时,这个自定义比较器永远不会被调用。任何想法我做错了什么,或者是否有更简单的方法来解决这个问题?

我不能使用@DiffIgnore,因为我制作的自定义注释接受了一些用户可以指定我们在审计过程中使用的特殊参数。

【问题讨论】:

    标签: java spring-boot comparator audit javers


    【解决方案1】:

    JaVers 具有为此设计的 @DiffInclude 属性。见https://javers.org/documentation/domain-configuration/#property-level-annotations

    将其放在您要审核的字段上,其他字段会被 JaVers 忽略。这是正确的方法,你不能注册你的注释。编写自定义比较器似乎是个坏主意,因为您必须复制 JaVers 差异算法。

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      相关资源
      最近更新 更多