Play
1.0带有一个基于http://oval.sourceforge.net/的功能齐全的验证框架。
随着2.0版本的发布,我的自定义验证器不再起作用。
如何使用Play Framework 2.0创建自定义验证器?
在Play 2.0中,验证框架扩展到数据的实际验证范围之外:
HTML Helpers是Play
2.0的新html" target="_blank">功能。在1.x中,Play在执行定义良好的验证框架方面已经相当出色。它功能强大且易于使用。但是,我们仍然必须将HTML表单和验证框架连接在一起。这可能会使初学者有些困惑。
现在,使用Play 2.0可以自动完成此操作。
但是,让我们关注答案并提供一些指导:我们将创建一个 AllUpperCase 验证器,该验证器在以下情况下都会产生错误:
package myvalidators;
import javax.validation.*;
public class AllUpperCaseValidator
extends play.data.validation.Constraints.Validator<Object>
implements ConstraintValidator<AllUpperCase, Object> {
/* Default error message */
final static public String message = "error.alluppercase";
/**
* Validator init
* Can be used to initialize the validation based on parameters
* passed to the annotation.
*/
public void initialize(AllUpperCase constraintAnnotation) {}
/**
* The validation itself
*/
public boolean isValid(Object object) {
if(object == null)
return false;
if(!(object instanceof String))
return false;
String s = object.toString();
for(char c : s.toCharArray()) {
if(Character.isLetter(c) && Character.isLowerCase(c))
return false;
}
return true;
}
/**
* Constructs a validator instance.
*/
public static play.data.validation.Constraints.Validator<Object> alluppercase() {
return new AllUpperCaseValidator();
}
}
您可能会注意到的第一件事是导入:Play 2.0确实符合JSR 303-Bean验证框架。在这种情况下,验证器需要实现
ConstraintValidator 。在我们的案例中,它将转换为类
的注解AllUpperCase
(我们将在稍后介绍),将T转换为泛型Object
。
验证器很简单:
我们定义了方法 public boolean isValid(Object object)
,如果验证通过,则该方法返回一个布尔值。还有一个消息ID和一个实例化验证程序的方法。
下面的类定义了一个命名注释@AllUpperCase
,该注释不带任何参数,但可以强制执行先前定义的验证。提供与注释框架相关的详细信息超出了本文的范围。
package myvalidators;
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import javax.validation.*;
@Target({FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = AllUpperCaseValidator.class)
@play.data.Form.Display(name="constraint.alluppercase")
public @interface AllUpperCase {
String message() default AllUpperCaseValidator.message;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
请注意注释如何与拼图的其他部分粘合。
@Constraint
JSR 303批注链接到验证器@play.data.Form.Display
,将注释链接到play html帮助器。请注意,该名称很重要:我们正在定义一个名为 alluppercase* 的 约束 。Play使用此信息来调用Validator上的方法。 *public static play.data.validation.Constraints.Validator<Object> alluppercase()
现在,我们有了自定义验证器和注释
import myvalidators.*;
public static class MyData {
@AllUpperCase
public String name;
}
描述用法不在本文讨论范围之内,请在此URL中找到一个有效的示例
我通过createCustomToken()创建了自定义身份验证令牌,请参见https://firebase.google.com/docs/auth/admin/create-custom-tokens. 但稍后,当我尝试通过verifyIdToken()函数验证此令牌时,它会抛出以下错误 这是合理的,因为没有这样的ID。。。但我需要的是,简单地验证令牌,类似于jwt。验证()。。。 有没有人遇
问题内容: 我有其他人编写的REST api,其中处理请求到特定url的方法接受一堆从路径参数填充的参数。 撰写此文章的人曾经使用过DropWizard,但我以前没有使用它的经验。我的任务是通过将其与db中的值进行比较来验证studentId字段。这将非常简单,但是我被告知要使用自定义验证程序来执行此操作。我对编写注释非常陌生,但经过大量挖掘后,这样编写了注释, 此后,我将注释添加到了要像这样运行
我正在构建一个Spring Boot应用程序,并试图为我将在服务层验证的一些DTO/实体实现自定义验证。基于Spring关于这个问题的文档,我认为一种方法是实现org。springframework。验证。验证程序界面。 作为一个最小、完整、可重复的示例,请考虑以下代码: Spring初始化引导项目 在src/main/java/com中添加了以下代码。实例使用验证: 如果我点击endpoint触
问题内容: 我正在尝试在Log4j2中编写自己的RewritePolicy。该文档指出: RewritePolicy是一个接口,允许实现在将LogEvent传递给Appender之前检查并可能对其进行修改。RewritePolicy声明一个必须执行的名为rewrite的方法。该方法通过LogEvent传递,并且可以返回相同事件或创建一个新事件。 这是我的 java类 : 这是我的 yaml配置 文
问题内容: 我正在http://www.cafeaulait.org/javafaq.html上阅读#6.10项,然后我开始怀疑大型企业如何创建自己的JVM实现。一个人会尝试(或可行)实验性的东西吗? 问题答案: 从技术上讲,创建该新JVM所需的所有信息都是该语言和目标平台的公共规范。即使字节码解释在很大程度上相同,JVM还是需要根据其是要在台式机还是手机上运行而有所不同。 一些开始寻找信息的地方
我正在使用Hibernate@NotNull验证器,我正在尝试创建自定义消息来告诉用户哪个字段在空时产生了错误。类似这样的东西: (这将在我的ValidationMessages.properties文件中)。 其中,{0}应该是通过以下方式传递给验证程序的字段名: 我有办法做到吗?