向您演示一个小的tinyvalidator库,tinyvalidator库是执行验证流程的小型简单解决方案,该库可以在处理程序级别用于验证输入。
定义数据模型
验证从所需数据及其参数的定义开始。tinyvalidator使用基于注释的方法。
public class AuthRequest {
private String email;
@Size(min = 8)
private String password;
// getters, setters}
在此代码段中,我们使用了两个注释:@Email和@Size。第一个检查字段是否包含有效的电子邮件地址(尽管这适用于format。您需要实施电子邮件确认流程来检查此电子邮件确实存在)。第二个断言password字符串的长度不小于8。
您的API中可能还需要使用许多其他有用的内置验证器注释:
@NotNull –检查字段是否为空
@HttpUrl –检查字段是否包含有效的网址
@Pattern –接受与定义的常规表达式匹配的字段
构建验证流程的第二部分实际上是调用验证器组件,该组件根据定义的规则对bean进行断言:
public void login(Context context) {
Validator validator = new Validator();
AuthRequest request = context.bodyAsClass(AuthRequest.class);
List violations = validator.validate(request);
if (!violations.isEmpty()) {
String message = violations.stream()
.map(v -> v.getName().concat(": ").concat(v.getMessage()))
.collect(Collectors.joining(", "));
throw new BadRequestResponse(message);
}
AuthResponse result = service.login(request);
context.json(result);
}
public void signup (Context context){
AuthRequest request = context.bodyAsClass(AuthRequest.class);
Validator validator = new Validator();
List violations = validator.validate(request);
if (!violations.isEmpty()) {
String message = violations.stream()
.map(v -> v.getName().concat(": ").concat(v.getMessage()))
.collect(Collectors.joining(", "));
throw new BadRequestResponse(message);
}
AuthResponse result = service.signup(request);
context.json(result);
}
首先,我们在该方法中需要创建一个新validator实例:
Validator validator = new Validator();
然后,我们需要将bean传递给验证器。在我们的例子中,bean代表一个登录/注册请求(AuthRequest实体):
List violations = validator.validate(request);
这种方法基本上返回一个包含验证不通过的Collection。如果bean有效,则此Collection为空。否则,我们将获得没有通过验证的字段。在这种情况下,我们需要中断带有BadRequest响应的处理程序流,然后是有关错误消息。
您可以在github存储库中找到此文章的完整源代码。