「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
前言
嗨,大家好,相信大家在开发过程中经常编写后台接口,在前端调用后台接口的时候,需要对前端输入的参数进行合法性和有效性进行校验。有多种方式针对数据进行校验。本次给大家介绍一下基于@Valid注解的参数合法性校验。希望可以帮助到大家。下面开始上正题。
初始
@Valid注解校验是基于标准JSR-303规范开发的。@Valid注解可以用在类的方法、构造函数、方法参数和成员属性(字段)上面。当请求参数输入后,会对参数的合法性进行校验,如果参数异常,则直接会返回异常的message提示信息。 当然,在项目中使用@Valid注解,需要引入相关的依赖。本次根据Spring Boot的版本,引入如下pom依赖文件。大家可以根据自己使用的Spring Boot 版本引入相应的依赖文件即可。 Spring Boot版本如下:
<version>2.3.0.RELEASE</version>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.22</version>
</dependency>
快速开始
相信大家已经引入了响应的依赖,下面开始针对的注解进行介绍。
定义接口
如下是一个普通的接口,其中请求方式是:POST。在请求参数中,使用@Valid对参数体OrderDto进行了注释。当OrderDto作为参数进行访问时,会自动根据OrderDto中属性的注解进行校验。如果不满足条件,直接返回message异常信息。
@PostMapping("/V1/save")
public String addInfo(HttpServletRequest request, @Valid @RequestBody OrderDto orderDto) {
log.info("信息新增接口,请求参数是:{}", JSON.toJSONString(orderDto));
try {
return JSON.toJSONString(orderDto);
} catch (Exception e) {
log.error("信息新增接口,请求参数是:{},异常原因是:", JSON.toJSONString(orderDto), e);
return "推送接口失败。失败原因为:" + e.getMessage();
}
}
@Null
介绍:带@Null注释的元素必须是null。
参数类型:接受任何类型参数。
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@Null(message = "id必须为空")
private String id;
@NotNull
介绍:带@NotNull注释的元素必须不为null。
参数类型:接受任何类型参数。
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@NotNull(message = "姓名不能为空")
private String name;
@AssertFalse
介绍:带AssertFalse注释的元素必须为false
参数类型:支持的类型为:boolean 和 Boolean
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@AssertFalse
private boolean bf;
@AssertTrue
介绍:带@AssertTrue注释的元素必须为true。
参数类型:支持的类型为:boolean 和 Boolean
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@AssertTrue
private boolean bt;
@AssertTrue
介绍:带@AssertTrue注释的元素必须为true。
参数类型:支持的类型为:boolean 和 Boolean
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@AssertTrue
private boolean bt;
@AssertTrue
介绍:带@AssertTrue注释的元素必须为true。
参数类型:支持的类型为:boolean 和 Boolean
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@AssertTrue
private boolean bt;
@DecimalMax
介绍:带@DecimalMax注释的元素的值必须小于或等于的数字等于指定的最大值。。
参数类型:BigDecimal BigInteger CharSequence及基础类型:byte short int long 和这些基础类型的包装类型
不支持参数类型:由于四舍五入错误,不支持double和float
使用地方:方法、属性、注释类型、构造函数、参数
null值被认为是有效的。
value : 元素的值必须小于或等于
inclusive:指定的最大值是否包含。默认情况下,它是包含的。
message:自定义返回的异常信息。
示例:
@DecimalMax(value = "100.00")
private BigDecimal bdMax;
@DecimalMin
介绍:带@DecimalMin注释的元素的值必须大于或等于的数字等于指定的最小值。。
参数类型:BigDecimal BigInteger CharSequence及基础类型:byte short int long 和这些基础类型的包装类型
不支持参数类型:由于四舍五入错误,不支持double和float
使用地方:方法、属性、注释类型、构造函数、参数
null值被认为是有效的。
value : 元素的值必须大于或等于
inclusive:指定的最小值是否包含。默认情况下,它是包含的。
message:自定义返回的异常信息。
示例:
@DecimalMin(value = "60.00")
private BigDecimal dmMin;
@Digits
介绍:@Digits限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction,带注释的元素必须是可接受范围内的数字。
参数类型:BigDecimal BigInteger CharSequence及基础类型:byte short int long 和这些基础类型的包装类型
null值被认为是有效的。
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@Digits(integer = 100,fraction = 100)
private double aDouble;
@Future
介绍:带@Future注释的元素必须是将来的一瞬间、日期或时间。
参数类型:Date; Calendar ;Instant; LocalDate; LocalDateTime; LocalTime ;MonthDay ;OffsetDateTime ;OffsetTime ;Year ;YearMonth; ZonedDateTime; HijrahDate ;JapaneseDate; MinguoDate; ThaiBuddhistDate;
使用地方:方法、属性、注释类型、构造函数、参数
null值被认为是有效的。
message:自定义返回的异常信息。
示例:
@Future
private Date futureDate;
@Max
介绍:带@Max注释的元素值必须小于或者等于指定的最大值。
参数类型:BigDecimal BigInteger byte short int long 和这些基础类型的包装类型
不支持参数类型:不支持double和float
null值被认为是有效的。
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@Max(value = 1000)
private Long maxInfo;
@Min
介绍:带@Min注释的元素值必须大于或者等于指定的最小值。
参数类型:BigDecimal BigInteger byte short int long 和这些基础类型的包装类型
不支持参数类型:不支持double和float
null值被认为是有效的。
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@Min(value = 1)
private Long minInfo;
@Past
介绍:带@Past注释的元素必须是过去的瞬间、日期或时间。现在默认定义为虚拟机的当前时间。
参数类型:Date; Calendar ;Instant; LocalDate; LocalDateTime; LocalTime ;MonthDay ;OffsetDateTime ;OffsetTime ;Year ;YearMonth; ZonedDateTime; HijrahDate ;JapaneseDate; MinguoDate; ThaiBuddhistDate;
使用地方:方法、属性、注释类型、构造函数、参数
null值被认为是有效的。
message:自定义返回的异常信息。
示例:
@Past
private Date pastDate;
@Pattern
介绍:带@Pattern注释的必须与指定的正则表达式匹配。
参数类型:正则表达式遵循Java正则表达式约定
使用地方:方法、属性、注释类型、构造函数、参数
regexp:正则表达式
flags:正则表达式是否启用的枚举数组
message:自定义返回的异常信息。
示例:
@Pattern(regexp = "^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$",
flags = Pattern.Flag.CASE_INSENSITIVE)
private String patternInfo;
@Size
介绍:带@Size注释的元素大小必须介于指定的边界(包括)之间。
参数类型:CharSequence 计算字符序列的长度; Collection 计算集合大小; Map 映射大小已计算; Array 计算数组长度;
null 元素被认为是有效的; min 最小值,默认为0; max 最大值,默认为 0x7fffffff;
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@Size(min = 0,max = 100)
private int sizeInfo;
@NotEmpty
介绍:带@NotEmpty注释的元素不能为 null或为空
参数类型:CharSequence 计算字符序列的长度; Collection 计算集合大小; Map 映射大小已计算; Array 计算数组长度;
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@NotEmpty
private String phone;
@NotBlank
介绍:验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格。带注释的元素不能是null,并且必须至少包含一个非空白字符。
参数类型:Object
使用地方:方法、属性、注释类型、构造函数、参数
message:自定义返回的异常信息。
示例:
@NotBlank
private String nickName;
介绍:字符串必须是格式正确的电子邮件地址。构成有效数据的确切语义
参数类型:基础类型 CharSequence
使用地方:方法、属性、注释类型、构造函数、参数
null 元素被认为是有效的。
regexp:正则表达式
flags:结合使用以指定正则表达式
message:自定义返回的异常信息。
示例:
@Email
private String email;
结语
以上就是Spring Boot集成@Valid注解的详细介绍,大家也可以查询接口文档去了解一下。
好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。