前言

在我们编写项目的时候,在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
 

在SpringBoot中使用FluentValidator验证插件的更多相关文章

  1. jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...

  2. aspx中的表单验证 jquery.validate.js 的使用 以及 jquery.validate相关扩展验证(Jquery表单提交验证插件)

    这一期我们先讲在aspx中使用 jquery.validate插件进行表单的验证, 关于MVC中使用 validate我们在下一期中再讲     上面是效果,下面来说使用步骤 jQuery.Valid ...

  3. jq中的表单验证插件------jquery.validate

    今天我们来说一下表单验证,有人说我们在进行表单验证的时候使用正则来验证是非常麻烦的,现在我来给大家介绍一下表单验证的插件:jquery.validate.min.js 它是与jquery一起结合用来使 ...

  4. 在SpringBoot中使用Docker(利用dockerfile-maven-plugin插件)

    周末在家做了一个实验: 将Docker通过插件的方式集成到SpringBoot中 然后通过Maven命令根据项目中的Dockerfile自动生成Docker镜像,同时将镜像推送到远程Linux服务器( ...

  5. SpringBoot中使用Maven插件,上传docker镜像

    开启docker远程端口 我上一篇里面写了,这里暴露的路径: 18.16.202.95:2375 简单构建 配置pom.xml文件 在properties中增加一行指定远程主机的位置 <prop ...

  6. springboot中使用mybatisplus自带插件实现分页

    springboot中使用mybatisplus自带插件实现分页 1.导入mybatisplus分页依赖 <dependency> <groupId>com.baomidou& ...

  7. jQuery Validate 表单验证插件----在class属性中添加校验规则进行简单的校验

    一.下载插件包. 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.jQuery表单验证插件----添加class属性形式的校验 <!DOCTY ...

  8. springboot中如何添加第三方的jar包或者说如何配置本地jar

    首先推荐博客: spring-boot-maven-plugin 安装本地jar 包 http://www.cnblogs.com/acm-bingzi/p/mavenSpringBootPlugin ...

  9. SpringBoot中使用LoadTimeWeaving技术实现AOP功能

    目录 1. 关于LoadTimeWeaving 1.1 LTW与不同的切面织入时机 1.2 JDK实现LTW的原理 1.3 如何在Spring中实现LTW 2. Springboot中使用LTW实现A ...

随机推荐

  1. 新版elasticsearch的插件安装

    安装 yum localinstall elasticsearch-6.1.1.rpm -y mkdir -p /elk/{data,logs} && chown -R elastic ...

  2. 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等

    1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...

  3. XML系列之--Linq操作带属性的XML(四)

    关于XML,之前解析过电文收发方面的,就是所谓的带表头.前缀(命名空间)SOAP格式.这次需求是解析一个xml的模板(xls内容),然后填充数据,最后保存.需要时可转换xls.pdf等文件.关于这种带 ...

  4. python 将验证码保存到本地 读取 写入

    #验证码 #读取验证码网址.打开本地路径.写入.输入验证码 downpicture = urllib.request.urlopen(SecretCodeUrl).read() local = ope ...

  5. tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue

    tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue 原创文章,请勿转载哦~!! 觉得有用的话,欢迎一起讨论相互学习~F ...

  6. WebService学习------小实例开发(号码归属地查询)

    1.WebService简介: WebService是一种跨平台,跨语言的,可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.通过SOAP在Web上提 ...

  7. DFS实现排列组合

    所谓排列,是指从给定的元素序列中依次取出元素,需要考虑取出顺序.比如,取出元素3, 5,因取出顺序的不同,则形成的序列{3, 5}与{5, 3}是不同的排列序列.对于长度为n的元素序列取出k个元素,则 ...

  8. 用js实现2048小游戏

    用js实现2048小游戏 笔记仓库:https://github.com/nnngu/LearningNotes 1.游戏简介 2048是一款休闲益智类的数字叠加小游戏.(文末给出源代码和演示地址) ...

  9. ajax调用handler,使用HttpWebRequest访问WCF服务

    引言 随着手机及移动设备的普及,移动端的应用也进入了热潮.以前PC端的门户网站,大多也均推出了适配移动设备的网站或者APP,再差的也注册了个公众号.在移动应用开发中,目前据我所了解到的解决方案有:1. ...

  10. [Python Study Notes]字符串处理技巧(持续更新)

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...