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来进行验 ...
随机推荐
- CentOS 7 Tomcat 启动后 外部无法访问的问题
1.启动tomcat 2. 验证tomcat 是否启动成功 ps -ef|grep tomcat 这样是启动成功了的 3 检查防火墙是否启动 firewall-cmd --state 防火墙 已 ...
- ftp服务器三种模式
一.匿名开放模式(最不安全) 1.[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf (主配置) anonymous_enable=YES //允 ...
- 设置Eclipse代码自动提示
对于编程人员来说,要记住大量的类名或类方法的名字,着实不是一件容易的事情.如果要IDE能够自动补全代码,那将为我们编程人员带来很大帮助. Eclipse代码里面的代码提示功能默认是关闭的,只有输入“. ...
- T2 AC自动机
T2:AC自动机 (ac.cpp) 题目背景 YZD在每天学习20小时的勤奋研究下,终于开发出了AC自动机!但是,这台AC自动机有一些bug,比如两个部件之间经常会出一些莫名其妙的问题,所以他想要随时 ...
- Python 入门之 软件开发规范
Python 入门之 软件开发规范 1.软件开发规范 -- 分文件 (1)为什么使用软件开发规范: 当几百行--大几万行代码存在于一个py文件中时存在的问题: 不便于管理 修改 可读性差 加载速度慢 ...
- 在Vue项目中加载krpano全景图
在Vue-cli项目中做krpano全景图编辑器的时候,由于js插件的路径是动态的,做的过程中遇到了加载不到资源的难题,在网上搜索了好久也没找到合适的办法,最后想到了可能是JS加载的问题,于是解决了问 ...
- 剑指offer 剪绳子
题目描述 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可能 ...
- 使用vue-cli脚手架快速构建项目
1.创建一个文件夹,vscode打开 2.ctr + shift+` 打开指令窗口 3.npm i vue-cli -g 安装vue-cli 4.vue -V 测试安装版本 检查是否安装成功 5. ...
- element样式调整用到的东西
修改element 样式不能j加scoped 一般来说常常用!important,为了提高权重会用到>,有时发现/deep/其实还蛮好用,如下 .range { .el-input--mini ...
- Java中的==和equals( )方法
在Java中,equals和==都是用于检测两个字符串是否相等,返回类型也都是boolean值,但是二者内部处理却不一样. ==与equals( ) ==在Java中是一个二元操作符,用于比较原生类型 ...