当前位置: 首页 > 知识库问答 >
问题:

Javers将字段与注释进行比较

焦信鸥
2023-03-14

我有一个Java8/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;
}
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();

共有1个答案

宋琛
2023-03-14

JaVers为此设计了@diffinclude属性。参见https://javers.org/documentation/domain-configuration/#property-level-annotations

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

 类似资料:
  • 我正在尝试将哈希检查从服务器应用程序移动到PostgreSQL。换句话说,我需要调用一个对PGSQL的查询,它将来自查询的字符串与来自字段的字符串进行比较,并将相等比较的结果返回为bool,但如果没有关于clear SQL的过程,我不知道如何实现这一点。 upd:我有字段密码的表用户(当前为文本,将来为bytea)。我想写点什么 它必须返回true或false作为相等比较的结果。

  • 问题内容: 我需要比较同一文档中的2个字段,实际值无关紧要。考虑以下文档: 我需要找到所有未分配主要内容的文档。我无法找到一种方法来比较primary_content_type_id和嵌套的content.content_type_id以确保它们是相同的值。这是我使用脚本尝试过的。我认为我不了解脚本,但这可能是解决此问题的一种方式: 请注意,如果我删除过滤器的脚本部分,并用另一个术语过滤器替换为,

  • 我需要比较同一个文档中的两个字段,其中的实际值无关紧要。考虑这份文件: 我需要查找未分配主要内容的所有文档。我无法找到一种方法将primary_content_type_id与嵌套content.content_type_id进行比较,以确保它们具有相同的值。这就是我尝试使用脚本的方法。我不认为我理解脚本,但这可能是解决这个问题的一种方法: 请注意,如果我删除过滤器的脚本部分,并将其替换为的另一个

  • 问题内容: 将代码点与Java字符进行比较的“正确”方法是什么?例如: 我知道我可以做到: 但是这段代码看起来很脆弱。有没有比较正式的API方法来,或转换到一个比较? 问题答案: 有一点背景知识:Java在1995年出现时,该类型基于原始的“ Unicode 88 ”规范,该规范限于16位。一年后,当Unicode 2.0实施时,替代字符的概念超出了16位的限制。 Java内部以utf-16格式表

  • 问题内容: 我正在运行Jersey REST服务。代表我的资源的POJO是带有JAXB(XML)注释的简单Java类(它们是从模式定义生成的-因此具有注释)。 我希望Jersey / Jackson忽略XML注释。我确实在我的web.xml这个配置(如提到这里): 我现在希望@XMLElement批注不再用于JSON字段命名策略。 但是看这个java领域(成员) 我仍然得到以下JSON表示形式: