Java+;在同一类中使用嵌套动作组合播放框架2

Java+;在同一类中使用嵌套动作组合播放框架2,java,playframework,annotations,playframework-2.1,Java,Playframework,Annotations,Playframework 2.1,我正在研究如何在Play Framework 2中实现一个过滤器,就我所知,最好的方法是使用动作合成来实现它 这就是说,我开始做一些测试,我能够使它工作。唯一的限制是当我在同一个类中有嵌套注释时 我的当前用例 当请求中存在域参数时,执行域验证 如果本地数据库中不存在域,请仅执行语法验证。 否则,需要完全验证(这里什么是完全验证并不重要) 我当前使用动作合成的代码 控制器有两个注释: 一个用于大多数需要进行完整域验证的情况 另一个专门针对addCustomer的注释,其中我只想执行语法验证 不

我正在研究如何在Play Framework 2中实现一个过滤器,就我所知,最好的方法是使用动作合成来实现它

这就是说,我开始做一些测试,我能够使它工作。唯一的限制是当我在同一个类中有嵌套注释时

我的当前用例

当请求中存在域参数时,执行域验证
如果本地数据库中不存在域,请仅执行语法验证。 否则,需要完全验证(这里什么是完全验证并不重要)

我当前使用动作合成的代码

控制器有两个注释:

  • 一个用于大多数需要进行完整域验证的情况
  • 另一个专门针对addCustomer的注释,其中我只想执行语法验证
不过有两个“问题”。我希望使用增强属性(syntaxVerificationOnly)只调用一次DomainVerifierFiler操作。发生的情况如下:

  • addCustomer两次调用“filter”
  • 第一个被调用的是方法注释(类注释总是覆盖方法)
@DomainVerificationFilter
公共类客户控制器{
公共结果updateCustomer(字符串域){}
公共结果deleteCustomer(字符串域){}
@DomainVerificationFilter(syntaxVerificationOnly=true)
公共结果addCustomer(字符串域){}
}
@With(DomainVerifierAction.class)
@目标({ElementType.TYPE,ElementType.METHOD})
@保留(RetentionPolicy.RUNTIME)
public@interface域验证过滤器{
布尔syntaxVerificationOnly()默认值为false;
}
公共类DomainVerifierAction扩展操作{
@凌驾
公共结果调用(Http.Context ctx)抛出Throwable{
if(configuration.syntaxVerificationOnly()){
//sintax验证
}否则{
//充分核实
}
}
}
问题:这有什么解决办法吗?我在这里做的是错误的吗?有什么建议吗

当前的解决方法是,我正在检查它是否是对同一操作的第二次调用。如果是,我就不检查了。但这显然是不可取的

另一种可能是在每个方法中添加注释。这也是不需要的,因为我有很多以域为参数的方法。而且,99.99%我需要执行完整域验证

韩国,
Alan

我能看到这种效果的唯一方法是更改注释,这样您就可以(在类级别)提供一个可选的方法列表来忽略或仅通过语法进行验证(以更适合您的应用程序的为准)

事实上,最好有两个不同的注释,一个在类级别,一个在方法级别

否则,我担心它总是会调用注释两次,因为它在代码中存在两次