当前位置: 首页 > news >正文

在SpringBoot中使用FluentValidator验证插件

前言

在我们编写项目的时候,在controller中往往离不开对一些数据的校验。这里并不是说对于这些数据业务上面的校验,而是对这些数据进行空校验或者是长度校验等。

有些时候校验可以省略,根据业务的需要进行调整,而多数情况下,服务端对客户端一直采用的是不信任的策略,所以对很多参数都需要进行校验。

而校验的目的就是为了安全有序的执行之后的业务逻辑。从而一定程度的上的减轻数据库的压力了,不要让数据库成为你校验数据的工具。

但是这样的校验总是显得很复杂而且很臃肿,复用性也不高,所以我准备使用FluentValidator这个插件帮助我完成这个任务。

已经加入我的github模版中:https://github.com/LinkinStars/springBootTemplate

 

FluentValidator简介

FluentValidator是百度的一个开源验证插件,我习惯这样叫它,简单的说,它就是为了校验数据简单并且复用而存在的。

通过这个插件,你可以对接收到的数据进行你所需要的校验,并且返回对应的错误信息,同时它还提供一些比较不错的显示错误的功能。

其实我主要使用它的原因在于,它的复用性高和代码简洁。

 

FluentValidator使用

使用gradle导入依赖

compile (group: 'com.baidu.unbiz', name: 'fluent-validator-jsr303', version: '1.0.9'){
exclude module: 'slf4j-log4j12'
}
需要注意的是需要防止jar冲突,所以需要排除一些依赖,你可以根据自己的需要使用。或者如果使用maven或者自行下载jar均可

 

新建NotNullStringValidator.java

package com.linkinstars.springBootTemplate.validator;

import com.baidu.unbiz.fluentvalidator.ValidationError;
import com.baidu.unbiz.fluentvalidator.Validator; import com.baidu.unbiz.fluentvalidator.ValidatorContext; import com.baidu.unbiz.fluentvalidator.ValidatorHandler; /** * 字符串非空校验 * @author LinkinStar */ public class NotNullStringValidator extends ValidatorHandler<String> implements Validator<String> { //需要被校验字符串的字段名 private String fieldName; public NotNullStringValidator(String fieldName) { this.fieldName = fieldName; } /** * 校验方法 * @param checkedString 需要被校验字符串 */ @Override public boolean validate(ValidatorContext context, String checkedString){ if (null == checkedString || "" == checkedString) { context.addError(ValidationError.create(String.format("%s不能为空!", fieldName)) .setErrorCode(-1) .setField(fieldName) .setInvalidValue(checkedString)); return false; } return true; } }

 

 

在需要校验的地方这样使用

//测试校验字符串参数
        String checkedString = "";
        Result validatorResult = FluentValidator.checkAll()
                .on(checkedString, new NotNullStringValidator("测试姓名")) .doValidate() .result(ResultCollectors.toSimple()); if (!validatorResult.isSuccess()) { System.out.println(validatorResult.getErrors()); }

如果需要校验多个字段,直接在.on后面继续.on即可如

.on(checkedString1, new NotNullStringValidator("测试姓名")).on(checkedString2, new NotNullStringValidator("测试帐号"))如果需要验证不同的情况,如验证数字的大小,验证手机号等,只需编写新的的Validator的类就可以了这里只是举例字符串的简单校验而已。

 

总结

使用这样的校验方式,可以在复用很多的校验规则,同时返回你所需要的错误信息,而且它提供了错误码可以自己定义编号,校验也会变的很清晰。使用的时候要注意下面几点,首先是要明确校验的规则,不能盲目的校验,还有就是有些时候需要特殊校验的就手动编写不一定非要都用插件校验。这个插件还有很多的功能,我只是提出了我所需要的功能和方式,具体更多的用法可以参考:

http://ju.outofmemory.cn/entry/241915
 

相关文章:

  • Nginx学习之开启Gzip压缩提升页面加载速度
  • 10.系统设计
  • Vue实现简单选项卡
  • Bzoj4872: [Shoi2017]分手是祝愿
  • android开发 获取logcat日志并记录(方便离线调试)
  • 微服务概述之架构演变
  • 数据分区------《Designing Data-Intensive Applications》读书笔记9
  • MySQL数据库锁定机制
  • mybatis架构分析
  • SQL必知必会笔记
  • 栈------表达式求值
  • UFPS入门: Unity FPS 教程
  • .NET Core 2.1路线图
  • 进程状态
  • linux运维面试精选
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • gops —— Go 程序诊断分析工具
  • Javascripit类型转换比较那点事儿,双等号(==)
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SAP云平台里Global Account和Sub Account的关系
  • Vue ES6 Jade Scss Webpack Gulp
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 番外篇1:在Windows环境下安装JDK
  • 分类模型——Logistics Regression
  • 构建工具 - 收藏集 - 掘金
  • 机器学习学习笔记一
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 码农张的Bug人生 - 初来乍到
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 算法---两个栈实现一个队列
  • 小而合理的前端理论:rscss和rsjs
  • 用 Swift 编写面向协议的视图
  • FaaS 的简单实践
  • 数据可视化之下发图实践
  • ​力扣解法汇总946-验证栈序列
  • ​一些不规范的GTID使用场景
  • $refs 、$nextTic、动态组件、name的使用
  • (13):Silverlight 2 数据与通信之WebRequest
  • (6)STL算法之转换
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二十三)Flask之高频面试点
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (理论篇)httpmoudle和httphandler一览
  • (论文阅读11/100)Fast R-CNN
  • (转)c++ std::pair 与 std::make
  • (状压dp)uva 10817 Headmaster's Headache
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...