一、基于注解进行数据校验
1、配置依赖
java--常用依赖配置_郑*杰的博客-优快云博客
2、创建一个配置类
package com.ruqi.aditainoal;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
@Configuration
@ComponentScan("com.ruqi.aditainoal")
public class SpringConfig {
@Bean
public LocalValidatorFactoryBean validatorFactoryBean(){
return new LocalValidatorFactoryBean();
}
}
3、创建一个实体类,并设置get,set方法并设置校验规则

package com.ruqi.aditainoal;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import org.springframework.stereotype.Component;
@Component
public class User {
@NotNull
private String name;
@Max(100)
@Min(0)
private int age;
@Email
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
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;
}
}
4、创建校验器
package com.ruqi.aditainoal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.validation.Validator;
import java.util.List;
@Component
public class ValidationByUser {
@Autowired
private Validator validator;
public boolean ValidationByUserOne(User user){
BindException bindException = new BindException(user, user.getEmail()); //传入任意一个字符串类型的属性即可
validator.validate(user,bindException);
List<ObjectError> allErrors = bindException.getAllErrors();
for (ObjectError allError : allErrors) {
System.out.println(allError);
}
return bindException.hasErrors();
}
}
5、测试
package com.ruqi.aditainoal;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestUser {
@Test
public void test(){
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
ValidationByUser bean = context.getBean(ValidationByUser.class);
User user = context.getBean(User.class);
user.setName("lucy");
user.setAge(100);
user.setEmail("23@qq.com");
boolean message = bean.ValidationByUserOne(user);
System.out.println(message);
}
}
二、基于方法进行校验
1、配置依赖
2、创建实体类
package com.ruqi.method;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import org.springframework.stereotype.Component;
@Component
public class User {
@NotNull
private String name;
@Max(100)
@Min(value = 0,message = "不能小于0")
private int age;
@Email(message = "格式错误")
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
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;
}
}
3、校验类
package com.ruqi.method;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.validation.Validator;
import org.springframework.validation.annotation.Validated;
import java.util.List;
@Component
@Validated //表示基于方法进行校验
public class ValidationByUser {
public String validation(@NotNull @Valid User user){
return user.toString();
}
}
4、测试
package com.ruqi.method;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestUser {
@Test
public void test(){
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
ValidationByUser bean = context.getBean(ValidationByUser.class);
User user = context.getBean(User.class);
user.setAge(10);
user.setEmail("11@@qq.com");
user.setName("lucy");
bean.validation(user);
}
}
三、自定义校验
1、定义一个注解,可以直接从其他注解抄一份
package com.ruqi.define;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy={DefineValidationImpl.class}) //表示该注解通过这个类实现校验逻辑
public @interface CanNotContainBlack {
// 默认提示的错误信息
String message() default "不可以包含空格";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface List {
CanNotContainBlack[] value();
}
}
2、对注解校验逻辑进行实现
package com.ruqi.define;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
public class DefineValidationImpl implements ConstraintValidator<CanNotContainBlack,String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value != null && value.contains(" ")){
//获取提示信息
String defaultConstraintMessageTemplate = context.getDefaultConstraintMessageTemplate();
System.out.println("default message:" + defaultConstraintMessageTemplate);
return false;
}
return true;
}
}
3、使用
package com.ruqi.method;
import com.ruqi.define.CanNotContainBlack;
import org.springframework.stereotype.Component;
@Component
public class User {
@CanNotContainBlack(message = "不要包含空格")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}