浅谈Spring中@NotEmpty、@NotBlank、@NotNull区别

作者:x@lijun 时间:2023-01-02 08:15:49 

1:引入依赖

<dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
           <version>2.0.5.RELEASE</version>
       </dependency>

@NotEmpty、@NotBlank、@NotNull 包的位置:

import javax.validation.constraints.*;

2:区别

@NotNull
适用于基本数据类型(Integer,Long,Double等等),当 @NotNull 注解被使用在 String 类型的数据上,则表示该数据不能为 Null(但是可以为 Empty)

注:被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制

@NotBlank
适用于 String 类型的数据上,加了@NotBlank 注解的参数不能为 Null 且 trim() 之后 size > 0,必须有实际字符

@NotEmpty
适用于 String、Collection集合、Map、数组等等,加了@NotEmpty 注解的参数不能为 Null 或者 长度为 0

3:使用方法

@Data
public class BigPeople {
   @ApiModelProperty(value = "id" ,required = true)
   @NotNull(message = "id不能为空")
   @Length(message = "id不能超过{max}个长度",max = 10)
   private Integer id;

@ApiModelProperty(value = "name" ,required = true)
   @NotBlank(message = "name不能为空")
   @Size(message = "名字最长为{max} 个字",max = 10)
   private String name;

@ApiModelProperty(value = "age" ,required = true)
   @NotNull(message = "id不能为空")
   @Range(message = "age的长度范围为{min}岁到{max}岁之间",min = 5,max = 10)
   private Integer age;

@ApiModelProperty(value = "treeNode" ,required = true)
   @NotEmpty(message = "treeNode不能为空")
   private List<String> treeNode;

}

@Valid 包位置:

import javax.validation.Valid;

@Validated 包的位置

import org.springframework.validation.annotation.Validated;
   @ApiOperation(value = "新增或者修改一个人的信息")
   @PostMapping("/updateOrInsert")
   public Result updateOrInsert(@Valid @RequestBody  Person person){
       Boolean updateOrInsert = personService.updateOrInsert(person);
       if (updateOrInsert) {
           return new Result(ResultCode.SUCCESS,updateOrInsert);
       }
      return new Result(ResultCode.ERROR, "新增或者修改一个人的信息失败");
   }

@ApiOperation(value = "新增或者修改一个人的信息")
   @PostMapping("/updateOrInsert")
   public Result updateOrInsert(@Validated @RequestBody  Person person){
       Boolean updateOrInsert = personService.updateOrInsert(person);
       if (updateOrInsert) {
           return new Result(ResultCode.SUCCESS,updateOrInsert);
       }
      return new Result(ResultCode.ERROR, "新增或者修改一个人的信息失败");
   }

 最上面三个注释: 必须需要搭配@Valid 或者@Validated使用,在检验Controller的入参是否符合规范时

@Valid 和 @Validated 比较

最后我们来对 @Valid 和 @Validated 两个注解进行总结下:

1:@Valid 和 @Validated 两者都可以对数据进行校验,待校验字段上打的规则注解(@NotNull, @NotEmpty等)都可以对 @Valid 和 @Validated 生效;

2:@Valid 进行校验的时候,需要用 BindingResult 来做一个校验结果接收。当校验不通过的时候,如果手动不 return ,则并不会阻止程序的执行;

3:@Validated 进行校验的时候,当校验不通过的时候,程序会抛出400异常,阻止方法中的代码执行,这时需要再写一个全局校验异常捕获处理类,然后返回校验提示。

4:总体来说,@Validated 使用起来要比 @Valid 方便一些,它可以帮我们节省一定的代码,并且使得方法看上去更加的简洁。

此包下其它常用的校验注解:

注解含义
@Null元素必须为null
@NotNull元素不能null
@AssertTrue元素必须为true
@AssertFalse元素必须是false
@Min(value)元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min)元素的大小必须在指定的范围内
@Digits(integer,fraction)元素必须是一个数字,其值必须在可接受的范围内
@Past元素必须是一个过去的日期
@Future元素必须是一个将来的日期
@Pattern(value)元素必须符合指定的正则表达式

@Email

@Length

@NotEmpty

@Range

1:元素必须是电子邮箱地址

2:字符串的大小必须在指定的范围内

3:字符串必须非空

4:元素必须在合理的范围内

来源:https://blog.csdn.net/XikYu/article/details/128869563

标签:Spring,@NotEmpty,@NotBlank,@NotNull
0
投稿

猜你喜欢

  • JAVA实现账户取款和存款操作

    2023-08-22 16:31:45
  • Android下保存简单网页到本地(包括简单图片链接转换)实现代码

    2021-05-27 03:45:52
  • springboot 微信授权网页登录操作流程

    2022-12-12 08:26:19
  • Android SQLite基本用法详解

    2023-07-02 05:14:58
  • C#中的HttpWebRequest类用法详解

    2022-11-07 11:41:17
  • C#利用缓存分块读写大文件

    2022-10-20 11:18:22
  • java之Object类用法实例

    2023-11-05 04:14:26
  • C#使用第三方组件实现动态解析和求值字符串表达式

    2023-12-27 09:06:50
  • 完美解决PermGen space异常的问题

    2023-08-19 07:54:55
  • C#控制台实现飞行棋游戏

    2022-03-12 04:18:40
  • java字符串替换排序实例

    2023-05-30 07:58:29
  • C#图形区域剪切的实现方法

    2021-09-12 10:15:50
  • Android获取和读取短信验证码的实现方法

    2021-09-06 07:29:17
  • SpringBoot @Scope与@RefreshScope注解使用详解

    2022-11-13 17:52:44
  • SpringCloud客户端报错:- was unable to send heartbeat!的解决

    2021-08-13 14:08:11
  • Triple协议支持Java异常回传设计实现详解

    2021-08-16 17:16:09
  • java 引用类型的数据传递的是内存地址实例

    2023-11-29 15:13:53
  • C#将Excel中的数据转换成DataSet

    2021-10-29 18:20:55
  • Java必备知识之位运算及常见进制解读

    2022-02-10 00:42:19
  • Flutter Widgets之标签类控件Chip详解

    2023-06-26 14:22:35
  • asp之家 软件编程 m.aspxhome.com