SpringBoot中使用注解校验实体类参数
1、引入需要的依赖
使用注解校验需要先引入对应的依赖
<!--参数校验注解所需依赖 spring-boot2.3之后需要单独引入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<!--这里版本一般和springboot一样-->
<version>${spring-boot.version}</version>
</dependency>
2、常用注解说明
| 注解 | 作用类型 | 作用说明 |
|---|---|---|
| @Null | 任意对象类型,不能是基本数据类型 | 字段只能为null |
| @NotNull | 任意类型 | 字段不能为null |
| @Min | byte/short/int/long/float/double及其对应的包装类;包装类对象不为null时才校验 | 限制必须为一个小于等于指定值的整数 |
| @Max | byte/short/int/long/float/double及其对应的包装类;包装类对象不为null时才校验 | 限制必须为一个大于于等于指定值的整数 |
| @NotBlank | 字符串 | 内容不为null且不为空字符串 |
| @NotEmpty | 字符串、集合、数组 | |
| @Range | String(数字类型的字符串),非null时才校验byte/short/int/long/float/double及其包装类,包装类非null时才校验 | 值在指定范围内 |
| @Size(min=,max=) | 字符串、集合、数组 | 长度在指定区间内,可以为null |
| @Pattern(regexp = “”,message = “”) | 字符串 | 字段需要符合注解中的正则表达式 |
| @Length(min=,max=) | 字符串 | 字符串长度需要在指定的区间 |
| @Past | Date或者Calendar对象 | 必须是一个过去的日期 |
| @PastOrPresent | Date或者Calendar对象 | 必须是一个过去或者当前的日期 |
| @Future | Date或者Calendar对象 | 必须是一个将来的日期 |
| @FutureOrPresent | Date或者Calendar对象 | 必须是一个将来或者当前的日期 |
3、@Valid与@Validated的区别
3.1、 注解使用的地方
- @Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
- @Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
3.2、 分组
- @Valid没有分组的功能
- @Validated提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制。没有添加分组属性时,默认验证没有分组的验证属性。
实体类参数:
这里需要注意的是如果当前对象引用的有其他对象,如果想引用的对象的校验也生效,需要在引用的对象上加@Valid注解
public class Grade {
private int id;
@NotBlank(message = "名称不能为空" , groups = {InsertGroup.class})
private String name;
private int grade;
private int classes;
@Valid
private User user;
}
Controller层代码
这里Controller层如果不加@Validated注解,即使实体类里加了校验的注解也不会生效,@RequestBody注解是指参数在请求的body体里
@RestController
public class TestController {
@PostMapping("/getGrade")
public Grade getGrade(@Validated(InsertGroup.class) @RequestBody Grade grade){
return new Grade();
}
}
自定义的分组接口
public interface InsertGroup {
}
这里分组是自定义的一个接口,接口里没有方法。
分组的意义在于不同的场景,同一个实体可能需要校验的规则不同,比如新建的时间,id可以为null,但是更新信息的时间id一定不可以为null。这时就可以用分组区分。
同时分组是可以继承的。
4、疑问
这里有一个疑问就是我有许多参数需要校验,前端如果什么都不传,调用接口会随机返回有校验的参数的提示信息,而不是固定的。不知道有什么办法可以解决
本文详细介绍了在SpringBoot中使用注解进行参数校验的方法,包括引入的依赖、常用注解的含义和用法,如@NotNull、@Size等。此外,对比了@Valid和@Validated的区别,强调了@Validated的分组功能在不同场景下的应用。文章最后提出了一个问题,当多个参数需要校验而前端未传入时,如何确保返回固定校验错误信息的解决方案。
601

被折叠的 条评论
为什么被折叠?



