游戏服务器显示OV,使用tinyvalidator实现服务器端验证 -Yuri Mednikov

向您演示一个小的tinyvalidator库,tinyvalidator库是执行验证流程的小型简单解决方案,该库可以在处理程序级别用于验证输入。

定义数据模型

验证从所需数据及其参数的定义开始。tinyvalidator使用基于注释的方法。

public class AuthRequest {

@Email

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存储库中找到此文章的完整源代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值