最近由于长时间混迹在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
异常,你可以通过全局异常处理器或者在控制器方法内部捕获这个异常来进行错误处理与响应。
注解的作用范围?
String的应用场景区别?
对于String类型的字段校验,确实可以使用@NotEmpty
注解,但需要注意:
@NotEmpty
会检查该String对象是否为null或者长度为0,也就是说,如果字符串是一个空串(“”),那么它将不会通过@NotEmpty
的校验。@NotEmpty
会认为这个字符串不为空,因为它确实包含至少一个字符(即空白字符)。@NotBlank
注解,它会去除两端空白后再进行判断。