我在寻找如何在Play Framework 2中实现过滤器,并且据我所知,最好的方法是使用动作组合来实现。Java + Play Framework 2在同一个类中嵌套动作组合
这就是说,我开始做一些测试,并且能够让它工作。唯一的限制是当我在同一个类中嵌套注释时。
我的当前使用情况
时域参数存在于请求执行域验证。
如果域在本地数据库中不存在,请仅执行语法验证。 否则,需要完整验证(什么是完整验证在这里并不重要)。
我当前使用代码动作组合物
该控制器有两个注解:
- 一个用于大多数的其中需要完整的域的验证的情况下。
- 另一个注释,专门用于addCustomer,我只想执行语法验证。
虽然有两个“问题”。我期待DomainVerifierFiler操作只能使用增强属性(syntaxVerificationOnly)调用一次。以下是发生的情况:
- 对于addCustomer,“过滤器”被调用两次;
- 要调用的第一个是方法注释(类注释总是覆盖该方法);
@DomainVerificationFilter
public class CustomerController {
public Result updateCustomer(String domain) {}
public Result deleteCustomer(String domain) {}
@DomainVerificationFilter(syntaxVerificationOnly = true)
public Result addCustomer(String domain) {}
}
@With(DomainVerifierAction.class)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DomainVerifierFilter {
boolean syntaxVerificationOnly() default false;
}
public class DomainVerifierAction extends Action<DomainVerifierFilter> {
@Override
public Result call(Http.Context ctx) throws Throwable {
if (configuration.syntaxVerificationOnly()) {
//sintax verification
} else {
//full verification
}
}
}
问:对此有任何解决?我在这里做错了吗?有什么建议么?
目前的解决方法是我正在检查它是否是第二次调用同一个动作。如果是的话,我会继续检查。但这显然不是理想的。
另一种可能性是在每种方法中添加注释。这也是不希望的,因为我有很多以域作为参数的方法。而且,99.99%我需要执行完整的域验证。
KR, 艾伦