JAVA全系列 教程
3762个小节阅读:7091.1k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
在代码之前我们先来介绍一下Validator接口
xxxxxxxxxx
public interface Validator {
/**
* 判断校验的类,如果支持对这个类的校验返回true,否则返回false
* @return 是否支持当前类类型
*/
boolean supports(Class<?> clazz);
/**
* 校验的具体逻辑
* @param target 目标对象
* @param errors 校验不同过后的错误信息。可以通过ValidationUtils快速校验和设置错误信息
*/
void validate(Object target, Errors errors);
}
ValidationUtils是一个工具类,可以快速的判断一个属性是否为null、长度为0、获取全是空格,并把错误绑定上。
还是使用People类进行测试。里面给定两个属性。
xxxxxxxxxx
package com.bjsxt.validation;
import lombok.Data;
@Data
public class People {
private String name;
private int age;
}
新建com.bjsxt.validation.MyValidator。类名和类所在的包都是随意定义的,没有强制要求。
xxxxxxxxxx
public class MyValidator implements Validator {
// 定义需要对哪个类进行校验
@Override
public boolean supports(Class<?> clazz) {
if(clazz.equals(People.class)){
return true;
}
return false;
}
// 具体校验规则
// 简单判断是否为空可以使用工具类。其他的校验规则需要自己定义
@Override
public void validate(Object target, Errors errors) {
// rejectIfEmpty(Errors对象,“校验的属性”,"错误码,可以设置为null",“校验不通过时日志打印的消息”):为空校验不通过
ValidationUtils.rejectIfEmpty(errors,"name",null,"姓名不能为空");
// 如果希望判断其他逻辑,需要手动编写
Object ageValue = errors.getFieldValue("age");// 获取age属性的值
if(ageValue!=null){
Integer age = Integer.parseInt(ageValue.toString());
if(age<1||age>150){
// rejectValue("校验的属性",“错误码”,"校验不通过时日志打印的消息"):表示属性校验不通过
errors.rejectValue("age",null,"年龄必须是1-150之间的数字");
}
}
}
}
在测试类中编写代码
xxxxxxxxxx
@Test
void testValidator(){
People people = new People();
DataBinder dataBinder = new DataBinder(people);
dataBinder.setValidator(new MyValidator());
dataBinder.validate();
BindingResult bindingResult = dataBinder.getBindingResult();
bindingResult.getAllErrors().forEach(err->{
System.out.println(err);
});
}