理解游戏框架中的验证

时间:2012-03-02 06:49:44

标签: 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参数是需要验证的实际传递值。

如果有人能澄清这些,那将会非常有帮助。我希望javadocs中有更多内容可以解释参数 @interface URI没有任何此类方法。

1 个答案:

答案 0 :(得分:2)

我没有在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();
}

如您所见,它有两个方法,其名称与我设置的参数相同。一旦我调用这些方法,我将获得与该注释实例相关的参数。

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

Max配置方法是:

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

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

我希望这会有所帮助:)