@NotNull、@NotEmpty 和 @NotBlank注解实体类校验

发布时间:2024年01月18日

最近由于长时间混迹在2.0的Java SWT项目运维里面,对用过的技术有点陌生了,虽然之前就做过3.0系统(SpringCloud分布式系统)的build1阶段的开发,但是忽略了技术沉淀,在安排到新的项目后,还是觉得有点吃力的。不管怎么说,摸鱼也要摸的进步啊!下面就介绍一下开发过程中遇到的一些问题,主要是做留档测试回顾。

在软件开发中,@NotNull@NotEmpty@NotBlank 这三个注解主要用来做数据校验的,之前还会在业务代码中使用多重if-else进行研究我的终极套娃技术,但是3.0开发我还是很开心的,因为不用被各种2.0老系统的组件和莫名的业务问题影响编码的能力,所以程序猿没有捷径,多敲代码才是王道!

遇到的问题:因为不熟悉这个注解的使用场景所以Integer类型我也标注了@NotEmpty,导致联调过程前段遇到

参数异常:HV000030: No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.Integer'. Check configuration for 'maxBatchNum'"

这个问题也很简单,就是自己在注解Integer类型的字段用到了@NotEmpty(纯傻)再进到controller层的时候通过@Valid 注解实体类的时候进行非空校验就报错了,所以就去百度各个注解的使用场景问题,顺便了解一下注解的验证节点规则。涉及到的注意事项大致如下:

  • 注解在何时生效?

    这些数据校验通常发生在运行时,在对象实例化后且在业务逻辑处理之前,特别是在处理HTTP请求参数绑定到模型对象或者进行方法调用前

    解释:这三个注解一般搭配@Valid 使用 ====== 在Spring MVC框架中,如果在控制器(Controller)层的方法参数前添加了@Valid注解,那么在调用该方法之前,Spring会自动进行Java Bean Validation校验。这意味着,如果传入的对象上有@NotNull@NotEmpty@NotBlank等JSR-303/JSR-380规范定义的注解,那么Spring会根据这些注解的规则对相应的字段进行非空或其他类型的校验。如果数据校验失败,Spring会抛出一个MethodArgumentNotValidException异常,你可以通过全局异常处理器或者在控制器方法内部捕获这个异常来进行错误处理与响应。

  • 注解的作用范围?

    • @NotNull:主要应用于基本类型(Integer,Long,Double等等)和对象引用。如果其值为null,将会抛出约束异常。对于对象引用,表示该字段不能为null,但不关心对象内部属性是否为空。
    • @NotEmpty:适用于数组、集合、Map、字符串等对象。表明这些对象必须非空并且至少包含一个元素或字符。例如,对于字符串而言,它不仅可以检查其是否为null,还能检查其内容是否为空串。
    • @NotBlank:仅用于String类型。表明该字段不能为null,且去除两端空白后不能为空。相比于@NotEmpty,@NotBlank更为严格,它会在trim()处理之后再进行判断,因此可以防止用户输入全为空格的情况。
    • 总结来说,@NotNull最好是用于对象引用和基本类型的非空验证,而@NotEmpty和@NotBlank则是针对容器类和字符串类型的非空验证,其中@NotBlank还包含了对字符串两端空白的检查。
  • String的应用场景区别?

    对于String类型的字段校验,确实可以使用@NotEmpty注解,但需要注意:

    • @NotEmpty会检查该String对象是否为null或者长度为0,也就是说,如果字符串是一个空串(“”),那么它将不会通过@NotEmpty的校验。
    • 但是,如果String字段中包含的仅仅是空白字符(例如:" "),@NotEmpty会认为这个字符串不为空,因为它确实包含至少一个字符(即空白字符)。
    • 如果你需要更严格的校验,确保字符串不仅不为null,而且在trim()处理后也有实际内容,则应该使用@NotBlank注解,它会去除两端空白后再进行判断。
文章来源:https://blog.csdn.net/m0_73189865/article/details/135666628
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。