SpringBoot如何进行数据校验(普通校验、分组校验)呢?

戚薇 SpringBoot 发布时间:2023-05-14 19:47:29 阅读数:18651 1
下文笔者讲述Springboot中进行数据校验的方法及示例分享,如下所示

数据校验的实现思路

1.引入相应的jar包
2.在需要验证的实体类上放入相应的注解
使用以上方式,即可实现数据校验的效果
例:普通校验
//引入相关依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

//resources目录下
//ValidationMessages.properties文件
//因此在resources目录下创建ValidationMessages.properties文件,如下所示
   
user.name.size=用户名长度介于5到10个字符之间
user.address.notnull=用户地址不能为空
user.age.size=年龄输入不正确
user.email.notnull=邮箱不能为空
user.email.pattern=邮箱格式不正确
 
//创建User类
//配置数据校验

public class User {
    
    private Integer id;
    
    @Size(min = 5, max = 10, message = "{user.name.size}")
    private String name;
    
    @NotNull(message = "{user.address.notnull}")
    private String address;
    
    @DecimalMin(value = "1", message = "{user.age.size}")
    @DecimalMax(value = "200", message = "{user.age.size}")
    private Integer age;
    
    @Email(message = "{user.email.pattern}")
    @NotNull(message = "{user.email.notnull}")
    private String email;

    //省略getter和setter
}
 
@Size:
  指一个字符串的长度或者一个集合的大小
    必须在某一个范围中:
	   min参数表示范围的下限
       max参数表示范围的上限
       message表示校验失败时的提示信息。
@NotNull:
    注解表示该字段不能为空
@DecimalMin:
    注解表示对应属性值的下限
@DecimalMax:
    注解表示对应属性值的上限
@Email:
    注解表示对应属性格式是一个Email

//创建UserController

@RestController
public class UserController {

    @PostMapping("/user")
    public list<String> addUser(@Validated User user, BindingResult result){
        List<String> errors = new ArrayList<>();
        if(result.hasErrors()){
            List<ObjectError> allErrors = result.getAllErrors();
            for(ObjectError error : allErrors){
                errors.add(error.getDefaultMessage());
            }
        }
        return errors;
    }
}
 
为User参数添加@Validated注解
 表示需要对该参数做校验
   紧接着的BindingResult参数
     表示在校验出错时保存的出错信息。

当BindingResult中的haiErrors方法返回true
 表示有错误信息
  此时遍历错误信息
  将之返回给前端
 

分组校验

某一个实体类中
  定义很多校验规则
  但是在某一次业务处理中
  并不需要这么多校验规则
  此时就可以使用分组校验:

首先创建两个分组接口

public interface ValidationGroup1 {

}
public interface ValidationGroup2 {

}

实体类中添加分组信息

public class User {

    private Integer id;
	
	//groups属性,表示该校验属性规则所属的分组

    @Size(min = 5, max = 10, message = "{user.name.size}", groups = ValidationGroup1.class)
    private String name;

    @NotNull(message = "{user.address.notnull}", groups = ValidationGroup2.class)
    private String address;

    @DecimalMin(value = "1", message = "{user.age.size}")
    @DecimalMax(value = "200", message = "{user.age.size}")
    private Integer age;

    @Email(message = "{user.email.pattern}")
    @NotNull(message = "{user.email.notnull}", groups = {ValidationGroup1.class, ValidationGroup2.class})
    private String email;
}

@Validated注解中指定校验分组

@RestController
public class UserController {

    
    //@Validated(ValidationGroup2.class) 表示这里的校验使用ValidationGroup2分组的校验规则,即只校验邮箱地址是否为空、用户地址是否为空
    @PostMapping("/user")
    public List<String> addUser(@Validated(ValidationGroup2.class) User user, BindingResult result){
        List<String> errors = new ArrayList<>();
        if(result.hasErrors()){
            List<ObjectError> allErrors = result.getAllErrors();
            for(ObjectError error : allErrors){
                errors.add(error.getDefaultMessage());
            }
        }
        return errors;
    }
}

校验注解

校验注解 注解的元素类型 备注
AssertFalse Boolean、boolean 被注解的元素值必须为false
AssertTrue Boolean、boolean 被注解的元素值必须为true
DecimalMax BigDecimalBigInteger、CharSequence、byte、short、int、long以及它们各自的包装类 被注解的元素值小于等于@DecimalMax注解中的value值
DecimalMin BigDecimal、BigInteger、CharSequence、byte、short、int、long以及它们各自的包装类 被注解的元素值大于等于@decimalMin注解中的value值
Max BigDecimal、BigInteger、byte、short、int、long以及它们各自的包装类 被注解的元素值小于等于@Max注解中的value值
Min BigDecimal、BigInteger、byte、short、int、long以及它们各自的包装类 被注解的元素值必须大于等于@Min注解中的value值
Digits BigDecimal、BigInteger、CharSequence、byte、short、int、long以及它们各自的包装类 被注解的元素必须是一个数字,其值必须在可接受的范围内(整数位数和小数位数在指定范围内)
Email CharSequence 被注解的元素值必须是Email格式
Future java.util.Date、java.util.Calendar以及java.time包下的时间类 被注解的元素值必须是一个未来的日期
Past java.util.Date、java.util.Calendar以及java.time包下的时间类 被注解的元素值必须是一个过去的日期
PastOrPresent java.util.Date、java.util.Calendar以及java.time包下的时间类 被注解的元素值必须是一个过去的日期或者当前日期
FutureOrPresent java.util.Date、java.util.Calendar以及java.time包下的时间类 被注解的元素值必须是一个未来的日期或者当前的日期
Negative BigDecimal、BigInteger、byte、short、int、long以及它们各自的包装类 被注解的元素必须是负数
NegativeOrZero BigDecimal、BigInteger、byte、short、int、long以及它们各自的包装类 被注解的元素必须是负数或0
Positive BigDecimal、BigInteger、byte、short、int、long以及它们各自的包装类 被注解的元素必须是正数
PositiveOrZero BigDecimal、BigInteger、byte、short、int、long以及它们各自的包装类 被注解的元素必须是正数或0
NotBlank CharSequence 被注解的元素必须不为null并且至少有一个非空白的字符
NotEmpty CharSequence、Collection、Map、Array 被注解的字符集不为null或空字符串,被注解的集合或数组不为空。和@NotBlank注解相比,一个空格字符串在@NotBlank验证不通过,但是在@NotEmpty中验证通过
NotNull 任意类型 被注解的元素不为null
Null 任意类型 被注解的元素为null
Pattern CharSequence 被注解的元素必须符合指定的正则表达式
Size CharSequence、Collection、Map、Array 被朱姐的字符串长度、集合或者数组的大小必须在指定范围内
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202305/6435.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者