SpringBoot中使用(@NotEmpty、@NotBlank、@NotNull)注解校验实体类参数

SpringBoot中使用(@NotEmpty、@NotBlank、@NotNull)注解校验实体类参数

@NoNull、@NotEmpty等注解无效,以及嵌套对象属性验证无效问题

在进行请求参数的验证时,需要在controller方法的需要验证的参数前面加上该注解,否则Form中的验证注解不起作用。

但是如果是内层对象需要验证的话,需要在里面对象前也加上@valid,这样,无论嵌套多少,都可以验证(包括对象泛型)。

在这里插入图片描述

1、引入需要的依赖

<!--参数校验注解所需依赖 spring-boot2.3之后需要单独引入-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <!--这里版本一般和springboot一样-->
            <version>${spring-boot.version}</version>
        </dependency>

2、常用注解说明

在这里插入图片描述

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或者 @Valid 注解,即使实体类里加了校验的注解也不会生效,@RequestBody注解是指参数在请求的body体里

@RestController
public class TestController {
    @PostMapping("/getGrade")
    public Grade getGrade(@Validated(InsertGroup.class) @RequestBody Grade grade){
        return new Grade();
    }
}

@Valid与@Validated都是用来校验接收参数的。
 
@Valid是使用Hibernate validation的时候使用
 
@Validated是只用Spring Validator校验机制使用
 
说明:java的JSR303声明了@Valid这类接口,而Hibernate-validator对其进行了实现。
 
 
 
@Validated与@Valid区别:
 
@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上,不支持嵌套检测
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上,支持嵌套检测\
 
 
 
注意:SpringBoot使用@Valid注解需要引入如下POM
 
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

自定义的分组接口

public interface InsertGroup {
}

这里分组是自定义的一个接口,接口里没有方法。
分组的意义在于不同的场景,同一个实体可能需要校验的规则不同,比如新建的时间,id可以为null,但是更新信息的时间id一定不可以为null。这时就可以用分组区分。
同时分组是可以继承的。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
@NotBlank是Java Bean Validation(JSR 380)的一个注解,用于验证字符串类型的字段是否非空且不包含空格。\[1\]在实体类使用@NotBlank注解可以确保该字段的值不能为空字符串。如果字段的值为空或只包含空格,则会触发验证错误。\[1\] 在引用\[1\]的代码示例,UserLoginDto类使用了@NotBlank注解验证password、type和username字段。这意味着在进行用户登录请求时,这些字段的值不能为空字符串。如果这些字段的值为空或只包含空格,则会触发验证错误。\[1\] 需要注意的是,在使用@NotBlank注解之前,需要确保已经配置好了相关的验证器。在引用\[3\]的代码示例使用了LocalValidatorFactoryBean来进行注入,并通过validator.validate方法来进行验证。\[3\]这样可以确保@NotBlank注解的生效。\[3\] 总结起来,@NotBlank注解用于验证字符串类型的字段是否非空且不包含空格。在实体类使用@NotBlank注解可以确保该字段的值不能为空字符串。在使用@NotBlank注解之前,需要配置好相关的验证器。 #### 引用[.reference_title] - *1* [@NotEmpty、@NotBlank等注解的正确使用 @Validated和@Valid的区别 解决@NotBlank等注解不生效的问题 使用...](https://blog.csdn.net/lvoelife/article/details/126283828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Springboot 实体类注解类 @NotNull @NotEmpty @NotBlank的使用](https://blog.csdn.net/weixin_37380784/article/details/104017751)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [@Validated怎么校验实体的实体内的@NotBlank标签](https://blog.csdn.net/weixin_39388918/article/details/124421764)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值