首页 > 其他分享 >Spring43 - Bean Validation注解

Spring43 - Bean Validation注解

时间:2023-02-09 16:23:54浏览次数:47  
标签:validation class Spring43 Bean validator user Validator Validation public

Bean Validation注解实现

使用Bean Validation校验方式,就是如何将Bean Validation需要使用的javax.validation.ValidatorFactory 和javax.validation.Validator注入到容器中。spring默认有一个实现类LocalValidatorFactoryBean,它实现了上面Bean Validation中的接口,并且也实现了org.springframework.validation.Validator接口。

第一步 创建配置类,配置LocalValidatorFactoryBean

@Configuration
@ComponentScan("com.atguigu.spring6.validation.method2")
public class ValidationConfig {

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }
}

第二步 创建实体类,使用注解定义校验规则

public class User {

    @NotNull
    private String name;

    @Min(0)
    @Max(120)
    private int age;

    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;
    }
}

常用注解说明
@NotNull 限制必须不为null
@NotEmpty 只作用于字符串类型,字符串不为空,并且长度不为0
@NotBlank 只作用于字符串类型,字符串不为空,并且trim()后不为空串
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

第三步 使用两种不同的校验器实现

(1)使用jakarta.validation.Validator校验

import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validator;

@Service
public class MyService1 {

    @Autowired
    private Validator validator;

    public  boolean validator(User user){
        Set<ConstraintViolation<User>> sets =  validator.validate(user);
        return sets.isEmpty();
    }

}

(2)使用org.springframework.validation.Validator校验

import org.springframework.validation.BindException;
import org.springframework.validation.Validator;

@Service
public class MyService2 {

    @Autowired
    private Validator validator;

    public boolean validaPersonByValidator(User user) {
        BindException bindException = new BindException(user, user.getName());
        validator.validate(user, bindException);
        return bindException.hasErrors();
    }
}

第四步 测试

public class TestMethod2 {

    @Test
    public void testMyService1() {
        ApplicationContext context = new AnnotationConfigApplicationContext(ValidationConfig.class);
        MyService1 myService = context.getBean(MyService1.class);
        User user = new User();
        user.setAge(-1);
        boolean validator = myService.validator(user);
        System.out.println(validator);
    }

    @Test
    public void testMyService2() {
        ApplicationContext context = new AnnotationConfigApplicationContext(ValidationConfig.class);
        MyService2 myService = context.getBean(MyService2.class);
        User user = new User();
        user.setName("lucy");
        user.setAge(130);
        user.setAge(-1);
        boolean validator = myService.validaPersonByValidator(user);
        System.out.println(validator);
    }
}

标签:validation,class,Spring43,Bean,validator,user,Validator,Validation,public
From: https://www.cnblogs.com/Ashen-/p/17105681.html

相关文章

  • 713~714 登录案例_BeanUtils基本使用 AND 2登录案例_BeanUtils介绍
    8.login.html中form表单的action路径的写法虚拟目录+Servlet的资源路径9.BeanUtils工具类,简化数据封装用于封装JavaBean的1.JavaBean:标准的Java类1......
  • Spring源码第一章:创建简单的 Bean 容器
    一、SpringBean容器是什么?Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种用于承载对象的容器,你可以配置你的每个Bean对象是如何被创建的,这些Bean......
  • 登录案例-BeanUtils基本使用、BeanUtils介绍
    登录案例BeanUtils基本使用、BeanUtils介绍login.html中form表单的action路径的写法虚拟目录+Servlet的资源路径BeanUtils工具类,简化数据封装用于封......
  • Spring框架中的单例Bean是线程安全的么?
    Spring中的Bean默认是单例模式的,框架并没有对bean进行多线程的封装。所以单例bean是线程不安全的。如果Bean是有状态的(有状态即有数据存储功能),则需要我们自己来保证线程安......
  • Spring12 - 注解管理bean
    Annotation从Java5开始,Java增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变......
  • Spring9 - bean生命周期
    ②修改类UserpublicclassUser{privateIntegerid;privateStringusername;privateStringpassword;privateIntegerage;publicUs......
  • Spring10 - FactoryBean
    FactoryBean①简介FactoryBean是Spring提供的一种整合第三方框架的常用机制。和普通的bean不同,配置一个FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中......
  • BeanUtils源码解析
    ......
  • 一对多与多对一的bean类
    N对一,对应对象。如:Student类对应Class类(一个学生对应一个班级)publicclassStudent{privateIntegersId;privateStringsName;privateIntegerag......
  • Spring6 DI 依赖注入--Bean属性赋值
    Spring6基于XML实现Bean管理(属性赋值)IOC和DI有什么区别:DI是IOC中的具体实现,DI表示依赖注入或注入属性,注入属性要在创建对象的基础之上完成依赖注入方法bean属性赋值方......