在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 ...
随机推荐
- junit源码解析--测试驱动运行阶段
前面的博客里面我们已经整理了junit的初始化阶段,接下来就是junit的测试驱动运行阶段,也就是运行所有的testXXX方法.OK,现在我们开始吧. 前面初始化junit之后,开始执行doRun方法 ...
- Ubuntu 安装 Nginx 实现反向代理
安装Nginx依赖库(ubuntu平台) 最近域名通过了备案, 想着应用总不能带着端口号访问吧, 于是在网上踩了很多坑, 终于找到了一步直达的方法,起码这一次很顺利的实现了 安装gcc g++的依赖库 ...
- Markdown中使用mermaid画流程图
Markown语法简单,用来写文档是个不错的选择. 但是Markdown 语法并不直接支持画图,当然方法还是有的. 本人用的Markdown编辑器为vscode,在里面直接安装merdaid插件即可使 ...
- cJSON使用
cJSON是使用C语言编写的 关于JSON数据的 编解码库,使用方便简单 编译时注意后面要跟-lm参数,否则编译会报错 解析JSON数据包流程: 1.调用cJSON_Parse()函数,解析J ...
- 【转】Linux方向职业分析
引言: 据了解,Linux普通网络管理人员的月薪大约5000元左右,负责编程的Linux软件工程师月薪大约在8000元到12000元之间,Linux嵌入式软件开发人员的月薪大约在12000元以上. 影 ...
- 【转】linux shell 逻辑运算符、逻辑表达式详解
shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑运算符 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测 ...
- Hibernate的五个主要接口
Hibernate作为持久成中间件,它的具体实现对与上层调用是透明的,即上层通过接口来调用Hibernate的具体实现,所以对于入门级别的讨论来说,自然应该先从接口开始了.
- Activity组件安全(下)
什么是Activity劫持 简单的说就是APP正常的Activity界面被恶意攻击者替换上仿冒的恶意Activity界面进行攻击和非法用途.界面劫持攻击通常难被识别出来,其造成的后果不仅会给用户带来严 ...
- bzoj 2208 [Jsoi2010]连通数
2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 512 MB Description Input 输入数据第一行是图顶点的数量,一个正整数N ...
- java中自定义异常类
hello,大家好,今天跟大家分享一下java中如何自定义异常,以后如果有新的心得,再添加,欢迎前辈指导... 首先,上Api,看一下异常和错误的父类: 然后,现在假设我有个循环(i=0;i<1 ...