在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
在SpringBoot中使用FluentValidator验证插件的更多相关文章
- jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...
- aspx中的表单验证 jquery.validate.js 的使用 以及 jquery.validate相关扩展验证(Jquery表单提交验证插件)
这一期我们先讲在aspx中使用 jquery.validate插件进行表单的验证, 关于MVC中使用 validate我们在下一期中再讲 上面是效果,下面来说使用步骤 jQuery.Valid ...
- jq中的表单验证插件------jquery.validate
今天我们来说一下表单验证,有人说我们在进行表单验证的时候使用正则来验证是非常麻烦的,现在我来给大家介绍一下表单验证的插件:jquery.validate.min.js 它是与jquery一起结合用来使 ...
- 在SpringBoot中使用Docker(利用dockerfile-maven-plugin插件)
周末在家做了一个实验: 将Docker通过插件的方式集成到SpringBoot中 然后通过Maven命令根据项目中的Dockerfile自动生成Docker镜像,同时将镜像推送到远程Linux服务器( ...
- SpringBoot中使用Maven插件,上传docker镜像
开启docker远程端口 我上一篇里面写了,这里暴露的路径: 18.16.202.95:2375 简单构建 配置pom.xml文件 在properties中增加一行指定远程主机的位置 <prop ...
- springboot中使用mybatisplus自带插件实现分页
springboot中使用mybatisplus自带插件实现分页 1.导入mybatisplus分页依赖 <dependency> <groupId>com.baomidou& ...
- jQuery Validate 表单验证插件----在class属性中添加校验规则进行简单的校验
一.下载插件包. 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二.jQuery表单验证插件----添加class属性形式的校验 <!DOCTY ...
- springboot中如何添加第三方的jar包或者说如何配置本地jar
首先推荐博客: spring-boot-maven-plugin 安装本地jar 包 http://www.cnblogs.com/acm-bingzi/p/mavenSpringBootPlugin ...
- SpringBoot中使用LoadTimeWeaving技术实现AOP功能
目录 1. 关于LoadTimeWeaving 1.1 LTW与不同的切面织入时机 1.2 JDK实现LTW的原理 1.3 如何在Spring中实现LTW 2. Springboot中使用LTW实现A ...
随机推荐
- php中urldecode()和urlencode()起什么作用
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%.urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原 ...
- sed&awk第二版读书笔记
1. POSIX标准对正则表达式字符和操作符的含义进行了形式化.这种标准定义了两类正则表达式:基本的正则表达式(BRE),grep和sed使用这种正则表达式;扩展的表达式,egrep和awk使用这种正 ...
- python selenium 鼠标悬停
#鼠标悬停 chain = ActionChains(driver) implement = driver.find_element_by_link_text() chain.move_to_elem ...
- OpenStreetMap数据清洗(SQL&MonogoDB版本)
目标:通过网上下载的OpenStreetMap.xml数据格式,将该文件的格式进行统计,清洗,并导出成CSV格式的文件,最后倒入到SQLite中 本案例中所需的包 import csv import ...
- Android项目目录结构
JDK JDK是java语言的软件开发工具包,它包含了java的运行环境,工具集合,基础类库等内容 Android SDK 是谷歌提供的 Android 开发包,在开发Android 项目的时候 ...
- iOS-Xcode编码自动补全失效
1. 退出 Xcode 2. 重启电脑 3. 找到 这个 DerivedData 文件夹 删除 (路径: ~/Library/Developer/Xcode/DerivedData) 4. 删除这个 ...
- The Go Programming Language. Notes.
Contents Tutorial Hello, World Command-Line Arguments Finding Duplicate Lines A Web Server Loose End ...
- salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)
Ajax Toolkit 参考文档:https://resources.docs.salesforce.com/212/latest/en-us/sfdc/pdf/apex_ajax.pdf 在项目中 ...
- 无线渗透测试之wifi密码破解
[声明]:本文仅供个人学习使用,请勿违法破解他人wifi 测试工具: 1.CDlinux启动盘:(请参照https://my.oschina.net/u/3112136/blog/800713) 2. ...
- SAS SATA SSD基本介绍
SATA硬盘采用新的设计结构,数据传输快,节省空间,相对于IDE硬盘具有很多优势: 1 .SATA硬盘比IDE硬盘传输速度高.目前SATA可以提供150MB/s的高峰传输速率.今后将达到300 MB/ ...