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
@Minbyte/short/int/long/float/double及其对应的包装类;包装类对象不为null时才校验限制必须为一个小于等于指定值的整数
@Maxbyte/short/int/long/float/double及其对应的包装类;包装类对象不为null时才校验限制必须为一个大于于等于指定值的整数
@NotBlank字符串内容不为null且不为空字符串
@NotEmpty字符串、集合、数组
@RangeString(数字类型的字符串),非null时才校验byte/short/int/long/float/double及其包装类,包装类非null时才校验值在指定范围内
@Size(min=,max=)字符串、集合、数组长度在指定区间内,可以为null
@Pattern(regexp = “”,message = “”)字符串字段需要符合注解中的正则表达式
@Length(min=,max=)字符串字符串长度需要在指定的区间
@PastDate或者Calendar对象必须是一个过去的日期
@PastOrPresentDate或者Calendar对象必须是一个过去或者当前的日期
@FutureDate或者Calendar对象必须是一个将来的日期
@FutureOrPresentDate或者Calendar对象必须是一个将来或者当前的日期

3、@Valid与@Validated的区别

3.1、 注解使用的地方

  1. @Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
  2. @Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上

3.2、 分组

  1. @Valid没有分组的功能
  2. @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、疑问

这里有一个疑问就是我有许多参数需要校验,前端如果什么都不传,调用接口会随机返回有校验的参数的提示信息,而不是固定的。不知道有什么办法可以解决

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值