springboot(11)使用SpringBoot validator进行数据验证
简介:
本章目标
在SpringBoot项目内完成参数后台数据校验。
SpringBoot的Web组件内部集成了hibernate-validator,所以我们这里并不需要额外的为验证再导入其他的包,接下来我们先来看看SpringBoot为我们提供了哪些验证。

一、项目构建
使用IntelliJ IDEA工具来构建一个SpringBoot项目,预先导入Web依赖

二、使用验证,书写实体类
我们接下来创建一个实体叫做DemoEntity,实体内添加几个测试字段并对每个字段都做出验证处理

public class DemoEntity implements Serializable
{
@NotBlank
@Length(min = 2,max = 10)
private String name; @Min(value = 1)
private int age; @NotBlank
private String mail; //自定义验证,值为1或2或3,其他均不可通过验证
@FlagValidator(values = "1,2,3")
private String flag; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getMail() {
return mail;
} public void setMail(String mail) {
this.mail = mail;
} public String getFlag() {
return flag;
} public void setFlag(String flag) {
this.flag = flag;
}
}

三、创建一个名叫IndexController的控制器并通过页面传递参数的形式来校验数据

@RestController
public class IndexController
{ @Autowired
private MessageSource messageSource; @RequestMapping(value = "/validator",method = RequestMethod.GET)
public String validator(@Valid DemoEntity entity, BindingResult result) {
if(result.hasErrors()) {
StringBuffer msg = new StringBuffer();
//获取错误字段集合
List<FieldError> fieldErrors = result.getFieldErrors();
//获取本地locale,zh_CN
Locale currentLocale = LocaleContextHolder.getLocale();
//遍历错误字段获取错误消息
for (FieldError fieldError :
fieldErrors) {
//获取错误信息
String errorMessage = messageSource.getMessage(fieldError,currentLocale);
//添加到错误消息集合内
msg.append(fieldError.getField()+":"+errorMessage+" , ");
}
return msg.toString();
}
return "验证通过," + "\t名称:" + entity.getName()+ "\t年龄:" + entity.getAge() + "\t邮箱地址:"+entity.getMail();
}
}

四、运行测试

五、自定义验证
1、自定义验证注解
我们先来创建一个注解,注解内部需要对应验证注解的验证实现类

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Constraint(validatedBy = FlagValidatorClass.class)
public @interface FlagValidator
{
//flag的有效值多个使用','隔开
String values();
//提示内容
String message() default "flag不存在"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};
}

2、@Constraint注解,里面传入了一个validatedBy的字段,这个就是我们自定义注解的实现类的类型,实现类代码
自定义验证实现类里面有两个方法,分别是初始化验证消息、执行验证。
初始化验证消息方法内你可以得到配置的注解内容,而验证方法则是你的验证业务逻辑。

public class FlagValidatorClass implements ConstraintValidator<FlagValidator, Object> {
//临时变量保存flag值列表
private String values;
//初始化values的值
@Override
public void initialize(FlagValidator flagValidator) {
//将注解内配置的值赋值给临时变量
this.values = flagValidator.values();
}
//实现验证
@Override
public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext)
{
//分割定义的有效值
String[] value_array = values.split(",");
boolean isFlag = false;
//遍历比对有效值
for (int i =0;i<value_array.length;i++)
{
//存在一致跳出循环,赋值isFlag=true
if(value_array[i].equals(value))
{
isFlag = true;
break;
}
}
//返回是否存在boolean
return isFlag;
}
}

测试:

springboot(11)使用SpringBoot validator进行数据验证的更多相关文章
- 使用SpringBoot进行优雅的数据验证
JSR-303 规范 在程序进行数据处理之前,对数据进行准确性校验是我们必须要考虑的事情.尽早发现数据错误,不仅可以防止错误向核心业务逻辑蔓延,而且这种错误非常明显,容易发现解决. JSR303 规范 ...
- SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念: SpringBoot 错误处理 2.具体内容 在之前的程序里面如果一旦出现了错误之后就会出现一堆的大白板,这个白板会 ...
- java框架之SpringBoot(11)-缓存抽象及整合Redis
Spring缓存抽象 介绍 Spring 从 3.1 版本开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.Cache ...
- 数据验证validator 与 DWZ
在进行系统经常使用的数据验证.数据验证可以编写自己的,它也可以用来作为现在.现在,记录这两个库的使用, validator <!DOCTYPE HTML PUBLIC "-//W3C/ ...
- springboot + 拦截器 + 注解 实现自定义权限验证
springboot + 拦截器 + 注解 实现自定义权限验证最近用到一种前端模板技术:jtwig,在权限控制上没有用springSecurity.因此用拦截器和注解结合实现了权限控制. 1.1 定义 ...
- SpringBoot 03_利用FastJson返回Json数据
自上一节:SpringBoot 02_返回json数据,可以返回json数据之后,由于有些人习惯于不同的Json框架,比如fastjson,这里介绍一下如何在SpringBoot中集成fastjson ...
- Springboot下实现阿里云短信验证功能(含代码)
Springboot下实现阿里云短信验证功能 一 开通阿里云短信服务 阿里云官网注册登录 找到短信服务并开通 打开短信服务的管理台 在国内消息那栏中添加签名管理和模板管理(按照格式要求去写) 在右上角 ...
- SpringBoot:4.SpringBoot整合Mybatis实现数据库访问
在公司项目开发中,使用Mybatis居多.在 SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问 中,这种jpa风格的把sql语句和java代码放到一起,总 ...
- SpringMVC学习系列(6) 之 数据验证
在系列(4).(5)中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 —> 数据验证. 这里我们采用Hibernate-validator来进行验 ...
随机推荐
- 意想不到的JavaScript(每日一题2)
问题一: 答案: 解析:
- centos8飞行驾驶舱和docker安装
零.先解决cenos8的网络(systemctl restart network.service已被废弃) 1.# vim /etc/sysconfig/network-scripts/ifcfg-e ...
- HDU 2973 YAPTCHA (威尔逊定理)
YAPTCHA Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 牛客小白月赛13-H(单调栈+树状数组)
题目链接:https://ac.nowcoder.com/acm/contest/549/H 题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积. 思路:显然最大矩阵的高一定为n个 ...
- ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
MySQL版本5.6.35 在一个长度为512字符的字段上创建unique key报错 CREATE DATABASE dpcs_metadata DEFAULT CHARACTER SET utf8 ...
- Linux进程后台执行nohup(OpenTSDB后台运行方法)
1.问题描述 OpenTSDB执行./tsdb tsd启动之后,占有控制台执行并且Ctrl+C后就退出了,关闭控制台同样会退出. 2.解决方法(在/opt/module/opentsdb-2.3.1/ ...
- GPIB、USB、PCI、PCI Express和以太网/LAN/LXI
GPIB 我们研究的第一个总线是IEEE 488总线,较为熟悉的称谓是GPIB(通用接口总线).GPIB是一种在业界已经得到证明的专为仪器控制应用设计的总线.GPIB在过去30年来一直是鲁棒的.可靠的 ...
- poj 1061 青蛙的约会+拓展欧几里得+题解
青蛙的约会+拓展欧几里得+题解 纵有疾风起 题意 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出 ...
- windows环境下搭建mysql主从
参考 windows环境下mysql主从配置 1. 环境 参数 说明 主库所在的操作系统 win7 主库的版本 mysql-5.6.46-winx64 主库的ip地址 127.0.0.1 主库的端口 ...
- YOLOv3训练过程笔记
本人使用的是linux平台,按照YOLO网页0https://pjreddie.com/darknet/yolo/的步骤操作进行下载darkenet程序包以及编译,之后可尝试用VOC2007的数据集测 ...