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

本文讲述了作者在从JavaSWT项目切换到SpringCloud3.0后,在开发过程中遇到的关于@NotNull、@NotEmpty和@NotBlank注解的数据校验问题,以及如何理解和使用这些注解进行严格的空值检查和SpringMVC中的自动验证。
摘要由CSDN通过智能技术生成

最近由于长时间混迹在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注解,它会去除两端空白后再进行判断。
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值