SpringBoot如何进行数据校验(普通校验、分组校验)呢?
下文笔者讲述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 | BigDecimal、BigInteger、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以及它们各自的包装类 | 被注解的元素必须是一个数字,其值必须在可接受的范围内(整数位数和小数位数在指定范围内) |
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 | 被朱姐的字符串长度、集合或者数组的大小必须在指定范围内 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。