使用@NotNull等注解,来对实体类的属性进行判定,减小冗余代码
2023-12-15 09:40:33
一般情况下前端会对入参进行校验,包括非空、大小、长度、正则等;而这个步骤后端在接参时依然不能省略,在前端传过来后,最基础的方案是一个一个使用if校验:
但这样会平白多出很多冗余代码,会让代码非常不美观,这里,就可以使用?javax.validation.constraints包下的各个注解来对实体类中的字段进行自动校验了;
并且还可以将create和update多个接口进行不同的校验规则,各种非空、长度、大学、正则以及报错信息的定义可以全部写在实体类里面,这样不对代码业务层进行干扰,使代码看起来更简洁
下面,就从零开始一步一步用起来
一、添加依赖
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>
二、给属性添加注解
注意导包需要?
import javax.validation.constraints.NotNull;
三、Controller上面加注解
@Validated
四、方法调取
可以看到刚刚加过@NotNull注解的字段如果入参是空,就会直接报错
五、自定义报错信息
一般情况下需要用此注解校验的字段会有多个,所以,可以在其后面自定义报错信息
@NotNull(message = "<行业分类>不能为空!")
测试结果:
六、给create和update添加校验分组来分别校验
在create和update两个方法校验时,同一个字段会有不同的校验规则,例如主键id在create时不用传,而update时是必传,这里就可以添加分组来分别校验:
首先在实体类中定义两个接口表示:
/* 现在分组校验 */
public @interface Create {}
/* 修改分组校验 */
public @interface Update {}
接口:
七、
现在被?实体类.Create.class标记的add接口就只校验Create标记过的字段guildType,而不校验Update标记的字段checkMsg
checkMsg为空时也不校验,而guildType为空时就报错
??
而另一半被?实体类.Update.class标记的put接口就只校验Update标记的字段checkMsg,而不校验
Create标记过的字段guildType,?guildType为空时也不校验,而checkMsg为空时就报错
除此之外还有其他各种注解使用,举一反三用法都大差不差,
注意导包时用? javax.validation.constraints.某注解? ?即可
各自作用详见下表:
注解 | 说明 |
---|---|
@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) | 被注释的元素必须符合指定的正则表达式。 |
被注释的元素必须是电子邮件地址 | |
@Length | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串必须非空 |
@Range | 被注释的元素必须在合适的范围内 |
文章来源:https://blog.csdn.net/SSHLY3/article/details/134999629
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!