区别

@NotNull在类字段中使用,表示该字段不能为空。它是 JSR303(Bean的校验框架)的注解。在调用controller的方法中加入@Valid就可以验证该方法参数中该类的对应属性是否为空,如果为空,注解中的提示信息会保存在result中。

@NonNull在方法或构造函数的参数上使用,表示该参数不能为空。

@NotNull使用

/*** user类*/
@Data
public class User {private int id;@NotNull(message = "babyId不能为空")private String babyId;
}
/*** controller的方法* controller方法要加上@Valid ,表示需要验证!*/@PostMapping("getMyUser")@ResponseBodypublic Baby getBaby(@Valid @RequestBody User user){return babyService.getBabyById(user.getBabyId());}

此时调用controller的getBaby方法时如果user中babyId为空,那么程序会报MethodArgumentNotValidException

获取错误信息

将上面的getBaby改为下面的例子:

@PostMapping("getMyUser")
@ResponseBody
public Baby getBaby(@Valid @RequestBody User user,Errors errors){List<ObjectError> oes = errors.getAllErrors();for (ObjectError oe : oes) {String key = null;String msg = null;// 字段错误if (oe instanceof FieldError) {FieldError fe = (FieldError) oe;key = fe.getField();// 获取错误验证字段名} else {// 非字段错误key = oe.getObjectName();// 获取验证对象名称}// 错误信息msg = oe.getDefaultMessage();System.out.println("key:"+key+";msg="+msg);}return babyService.getBabyById(user.getBabyId());
}

此时程序不会报错,但是可以获取错误信息:

key:babyId;msg=babyId不能为空

其他注解及解释

除了@NotNull,还有其他类似的注解,都是在类字段上使用

  • @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 被注释的字符串的大小必须在指定的范围内

*@Range 被注释的元素必须在合适的范围内

*@NotEmpty:用在集合类上,不能为null,并且长度必须大于0

*@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0

@NonNull使用

@Override
@Transactional
public Baby getBabyById(@NonNull String babyId) {return babyMapper.getBabyById(babyId);
}

如果 babyId 为空getBabyById会报NullPointerException

@NotNull和@NonNull的区别和使用相关推荐

  1. @NotNull与@NonNull使用笔记

    @NotNull与@NonNull使用笔记 @NotNull 一般作用在单独变量上,表示该变量不能为空.一般配合@validation使用,当被@NotNull修饰的变量的值为空时则会抛出错误. @N ...

  2. 【@NotNull和@NotBlank的区别】

    @NotNull和@NotBlank和@NotEmpty的区别 @NotBlank作用在集合上 例如: /*** uuid*/@NotEmpty(message = "uuid不能为空&qu ...

  3. @NotNull和@NotBlank的区别

    @NotNull和@NotBlank和@NotEmpty的区别 @NotEmpty作用在集合上 例: /*** 学生姓名*/@NotEmpty(message = "学生姓名不能为空&quo ...

  4. @NotBlank、@NotNull 、@NotEmpty的区别

    最近在公司写代码遇到了@NotBlank.@NotNull .@NotEmpty三种注解,今天我就总结一下这三种注解的区别. 这三个注解都用来对前端传来的数据进行空值校验,但是用法上会有一点区别: @ ...

  5. @NotEmpty,@NotNull和@NotBlank的区别

    1.@NotNull 不能为null,但可以为empty (""," "," ") 2.@NotEmpty 不能为null,而且长度必须大于 ...

  6. 表单校验之@NotBlank,@NotNull,@NotEmpty之间的区别

    @NotBlank一般用来校验String类型不能为空 @NotNull一般用来校验Integer类型不能为空 @NotEmpty一般用来校验List类型不能为空

  7. 加在形参上,spring的@NonNull和lombok的@NonNull的区别

    Spring的@NonNull spring 的 @Nonnull 一般是加在类的属性上,然后在作为形参时使用 @Validated 进行校验. 今天在代码里看到了将 @NonNull 放在方法的形参 ...

  8. Java 里 NonNull 和 NotNull 区别

    日常码 Java 的时候经常会遇到几个常用的 annotations,经常要用到 @NonNull,@NotNull 以及 @Nonnull.每次用都要查,每次查完又会忘掉,这里特意来总结一下以后用来 ...

  9. 开发中常见的@NotNull,@NotBlank,@NotEmpty注解的区别

    @NotEmpty,@NotNull和@NotBlank的区别 @NotEmpty :不能为null,且Size>0 @NotNull:不能为null,但可以为empty,没有Size的约束 @ ...

最新文章

  1. Unity3D 中 2D_Toolkit插件下载 和 导入方法
  2. 决策树算法十问及经典面试问题
  3. python csv 模块的使用
  4. VC中使用全局变量的2种办法及防错措施
  5. 运行配置文件中指定类的指定方法
  6. 图的广度优先搜索(bfs)以及深度优先搜索(dfs)
  7. jupyter notebook
  8. 博士考试考完了,庆祝一下
  9. [leetcode]Merge Intervals @ Python
  10. Linux下关于gcc、vim、readelf、rpm、yum、彩色进度条的问题
  11. 分布式消息规范 OpenMessaging 1.0.0-preview 发布 1
  12. python生成100个随机数、写入文件后再读取显示内容_Python3 实现随机生成一组不重复数并按行写入文件...
  13. 2018年四大爬虫代理IP提供商对比
  14. python api框架 hook_Windows API Hooking in Python
  15. 2022年版中国石油焦市场运行现状调研与前景动态分析报告
  16. 微型计算机配置单8000,计算机公共基础知识8000题库答案解析
  17. Fabric.js 文档
  18. 6.详解第二代蜂窝移动通信系统的典型代表——GSM和通用分组无线业务(GPRS)
  19. 编程术语晦涩_晦涩的编程语言的乐趣
  20. 海报看起来很普通?数字平原概念设计来制作

热门文章

  1. SQL优化篇:如何成为一位写优质SQL语句的绝顶高手
  2. 2021-12-10 Linux内核中watchdog,用户层喂狗程序分析
  3. Django学习笔记(Part1-简介)
  4. 求质数算法的N种境界
  5. 如何写好宣传软文?软文推广对企业有什么帮助?
  6. 2015年站长十大常用工具
  7. 北京站 Meetup 预告 | 这次我们聊聊 H5、WebAssembly 与 Flutter
  8. 【Tableau】各类别的商品中销量前十的品牌(子类别排序)
  9. Vue2.5+Vue-cli3.0+Vue-router仿制京东金融前端页面
  10. mysql 次方根_MySQL Sqrt()函数