我刚开始使用 Play,并试图在我的模型上获得一些自定义约束。
我发现这行得通
@Constraints.Required
@Constraints.MaxLength(15)
@Constraints.MinLength(4)
@Constraints.Pattern(value = "^\\w\\s$")
public String username;
但是现在我想添加一个带有自己实现的自定义约束(用于检查唯一性)所以我尝试了这个(它是由我的 IDE 自动完成的,所以它确实存在)
@Constraints.ValidateWith(Account.UniqueValidator.class)
public String username;
我在某个地方找到了(已经浏览了很多链接,所以再也找不到了,该类应该扩展 Constraints.Validator
这就是我所做的。
private class UniqueValidator extends Constraints.Validator<String>
{
@Override
public boolean isValid(String s) {
return Account.find.where().eq("username", s).findRowCount() == 0;
}
@Override
public F.Tuple<String, Object[]> getErrorMessageKey() {
return null;
}
}
但是我不知道在 getErrorMessageKey 值中返回什么,这是实现的必需方法。我查看了播放源,发现“某物”看起来像这样。即NotEmpty验证器。
但是,当您查看那里时,您会看到它返回一个元组,而不是 F.Tuple。当我在代码中更改它时,它抱怨它不是 F.Tuple。
试图返回
return Tuple("error.invalid", new Object[] {});
正如上面的 NotEmpty 验证器链接中所做的那样。但是它说它在 Tuple 之前需要“新”,但这给了我一个类,其中包含一堆必需的方法来实现。所以我想这不是真正的方法。
当我在这里查看 play 的文档时,我需要使用 @CheckWith 注释,但是当我选择它时,它说它找不到 @CheckWith 注释。
我搞不清楚了。:-)