Spring之数据校验:Vaildation

本文详细介绍了Spring MVC中数据校验的实现方式,包括使用注解进行Bean Validation、通过实现Validator接口自定义校验规则以及基于方法的校验。文章深入探讨了@Valid、@NotBlank等常用注解,以及如何处理校验错误。同时,还展示了配置LocalValidatorFactoryBean、创建自定义校验注解和验证器的步骤,是理解Spring MVC数据校验的实用教程。
摘要由CSDN通过智能技术生成

数据校验:Vaildation

前言

前言介绍了笔者所知道的最常用的技术,但是本文主要是用于Spring reviewed,所以下面步骤介绍不涉及到spring基础以外技术内容实现。

数据校验是在处理请求之前对数据进行验证的过程。Spring MVC提供了一个校验框架,可以使用注解和Validator接口来定义和执行校验规则。

1、注解

Spring MVC校验框架中最常用的注解是@Valid和@NotBlank。其中,@Valid注解用于对一个Java Bean对象进行校验,而@NotBlank注解则用于对一个String类型的数据进行非空校验。除此之外,Spring MVC校验框架还提供了许多其他的注解,包括:

  • @NotNull:用于校验对象是否为null。
  • @Size:用于校验字符串、集合或数组的长度。
  • @Pattern:用于校验字符串是否符合正则表达式。
  • @Min和@Max:用于校验数字的大小范围。
  • @Email:用于校验邮箱地址是否符合规范等等。

2、Validator接口

Validator接口是Spring MVC校验框架中的另一种校验方式,它允许你自定义校验规则。要使用Validator接口,你需要实现它的validate方法,并在其中编写校验逻辑。Validator接口的使用步骤如下:

  • 创建一个校验器类,实现Validator接口。
  • 在校验器类中编写校验规则。
  • 在Controller方法或模型(Model)对象上执行校验。

3、校验错误处理

当校验失败时,Spring MVC会生成一个包含错误信息的BindingResult对象。你可以在Controller方法或模型(Model)对象中使用BindingResult对象来获取校验失败的详细信息,并生成适当的错误响应。通常,你可以将BindingResult对象和Model对象一起传递给视图,以便在视图中显示错误信息。

综上所述,Spring MVC提供了强大的数据校验功能,可以大大简化数据校验的过程。如果你需要对请求参数或模型(Model)对象进行校验,Spring MVC的校验框架是一个非常有用的工具。

准备工作

1、引入依赖

hibernate-validator是一个流行的Java数据校验器库,它基于JSR 380规范实现了Bean Validation 2.0 API,并提供了许多常用的校验注解和校验器。jakarta.el是一个用于支持EL表达式的库,它是JavaEE规范的一部分,用于在Java应用程序中对数据进行动态绑定和计算。

如果你使用的是Spring Boot框架,它已经自带了数据校验器的依赖,并默认使用Hibernate Validator作为校验器实现。因此,你不需要手动配置这些依赖,只需要在代码中使用相关的注解和API即可。

<dependencies>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>7.0.5.Final</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>jakarta.el</artifactId>
        <version>4.0.1</version>
    </dependency>
</dependencies>

具体实现

一、注解实现:Bean Validation

常用注解说明

@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、创建配置类,配置LocalVaildatorFactoryBean

在Spring中使用基于注解的数据校验时,需要先配置一个LocalValidatorFactoryBean实例,用于创建和管理校验器对象。这个校验器对象实际上就是javax.validation.Validator接口的一个实现,它提供了一系列校验方法,可以对Java对象进行校验。在配置类中,我们使用@Bean注解来声明一个名为validator的方法,这个方法返回一个LocalValidatorFactoryBean实例。这个实例会被Spring容器管理,并可以在其他组件中使用@Autowired注解进行注入。

其次 ,LocalValidatorFactoryBean 实例需要在Spring容器中创建和管理,而不是通过new操作符手动创建。这是因为校验器需要在创建过程中进行一些复杂的初始化和配置,例如加载校验注解、解析校验表达式、注册自定义校验器等。而Spring框架提供了一个强大的IoC容器,可以自动管理对象的生命周期和依赖关系,可以很方便地创建和管理复杂的对象。因此,我们可以通过在配置类中声明一个@Bean方法来创建LocalValidatorFactoryBean实例,并将其纳入Spring容器的管理范围内。这样,在其他组件中就可以通过注入validator实例来使用校验器的功能了。

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

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

代码解析:

这段代码是一个配置类,主要作用是创建一个Validator对象用于数据校验。让我们逐行分析一下:

@Configuration 这个注解表明这是一个配置类。

@ComponentScan(“com.atguigu.spring6.validation.method2”) 这个注解表示需要扫描com.lyz.spring6.validation.method2包下的组件。

public class ValidationConfig 这是一个普通的Java类,用于配置Spring应用程序。

@Bean 这个注解表示这个方法将会返回一个Bean对象,该对象会被Spring容器管理。

public LocalValidatorFactoryBean validator() 这个方法创建了一个LocalValidatorFactoryBean对象,并返回该对象。LocalValidatorFactoryBean是一个Hibernate Validator提供的实现了Spring的Validator接口的数据校验器。它可以将Hibernate Validator和Spring Validator结合起来,提供更加灵活的数据校验功能。

整个配置类的作用就是创建一个 LocalValidatorFactoryBean 对象并将其交给Spring容器管理,以便在数据校验时使用。在需要进行数据校验的Controller方法中,可以通过 @Valid 注解来使用这个数据校验器,@Valid注解只有在Controller方法的参数列表中使用时才会生效。如果你要对其他对象进行数据校验,可以通过调用Validator对象的validate方法来实现。

2、创建实体类、使用注解定义校验规则
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;
    }
}
3、使用org.springframework.validation.Validator校验:
@Service
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值