我有一个@Audit
注解,它有许多可选属性,我需要强制使用一个布尔属性useAccount = true
用于某些包。
我尝试使用archunit来完成此验证,这样,每当开发人员提交违反规则的代码时,CI就会中断并通知团队。
这会中断建置:
@Audit
public myMethod(...) {
...
}
这是正确的方法:
@Audit(useAccount = true)
public myMethod(...) {
...
}
问题是Archunit目前不支持Assert方法。我希望做如下操作:
methods().that().resideInAnyPackage("..controllers..", "..service..").and().areAnnotatedWith(Audit.class).should(attributeCheckCondition)
然后,我的自定义条件attributeCheckCondition
将负责查看属性值。
有没有一种方法可以像检索类一样检索方法?而不必编写更复杂的 predicate 和条件?
3条答案
按热度按时间kuhbmx9i1#
更新
从ArchUnit 0.10.0开始,可以为成员创建规则。
另请参阅《用户指南》中的“编写成员规则”。
原始答案
由于目前没有基本的规则定义可用于方法,因此需要一个中间步骤。ArchUnit有一个
ClassesTransformer
将JavaClasses转换为其他类型的集合。然后,可以将此
ClassesTransformer
用作自定义规则定义的基础。另请参阅《使用指南》中的“具有自订概念的规则”和this issue。
kuuvgm7e2#
我找到了一种在类上使用自定义 predicate 和条件的方法,当我这样做的时候,我没有意识到罗兰的回应似乎更好,因为它提供了一种从方法的Angular 表达规则Assert的方法,这就是为什么我要求。
然而,我想在这里张贴的解决方案,使它可以对其他人有用。
则该规则表示为:
t3irkdon3#
除了@raspacorp(谁启发了我!)之外,这里还有一个自定义示例。
为了检查
@Secured(ROLE)
方法注解,我实现了以下规则:下面是此archCondition的示例用法: