java - 了解 playframework 中的验证

标签 java playframework

试图了解验证在 playframework1.2.4 中的工作原理,我浏览了 docs和 还可以通过some posts所以..还有一些事情困扰着我..

在文档中,URICheck类有以下方法

@Override
public void configure(URI uri) {
    setMessage(uri.message());
    this.schemes = Arrays.asList(uri.schemes());
}

uri.schemes() 从哪里来?除了 @interface URI 之外还有 URI 类吗?

此外,稍后在 isSatisfied() 方法中,

public boolean isSatisfied(Object validatedObject, Object value,OValContext context, Validator validator){
...
}

validatedObject 是 URI 的实例,不是吗? value参数是实际传递的值,需要验证。

如果有人能澄清这些,那将会很有帮助。我希望 javadoc 中有更多解释参数的信息 @interface URI 没有任何此类方法。

最佳答案

我在 PLay 的源代码中没有看到 URI 类,只有一个 URL,但行为是相同的。

当您使用与验证相关的注释来注释字段时,您可以为该注释提供一些参数。例如,为了简化:

   @Max(value=10, message="My error message")
   public int myValue;

该注释定义如下:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Constraint(checkWith = MaxCheck.class)
public @interface Max {

    String message() default MaxCheck.mes;
    double value();
}

可以看到,它有2个方法,其名称与我设置的参数相同。调用这些方法后,我将获取与该注释实例相关的参数。

稍后,Play 通过反射执行一些“魔法”来检​​查与实体字段相关的注释,在 configure 方法中使用该实例,然后执行 isSatisfied em> 方法。

Max配置方法是:

@Override
    public void configure(Max max) {
        this.max = max.value();
        setMessage(max.message());
    }

如您所见,它使用您在实体中初始化的注释中的方法。

我希望这有帮助:)

关于java - 了解 playframework 中的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9529215/

相关文章:

java - 读取和更新 XML 字符串

java - 为什么我得到这个结果?

java - 我正在使用 Securesocial & Play 框架。我在使用这个的时候遇到了一个bug

java - playframework 中的级联删除 - 如何为实体建模

java - 二进制 XML 文件行 #5 : Error inflating custom View class SlidingTabLayout

java - 使用 "invokedynamic"- 幕后发生了什么?

java - 如何在Android中显示绘制位图

java - 如何在 Play Framework 中声明第二个数据库进行测试?

mysql - 无法在 heroku 上使用 ClearDB 运行 Play Framework 1.2.4 应用程序

java - 发生 IllegalArgumentException : id to load is required for loading?