今天介绍一下 Spring Boot 如何优雅的整合JSR-303
进行参数校验,说到参数校验可能都用过,但网上的教程大多是简单的介绍,所以我们今天详细看来一下 。
什么是 JSR-303?
JSR-303
是 JAVA EE 6
中的一项子规范,叫做 Bean Validation
。
Bean Validation
为 JavaBean
验证定义了相应的元数据模型
和API
。缺省的元数据是Java Annotations
,通过使用 XML
可以对原有的元数据信息进行覆盖和扩展。在应用程序中,通过使用Bean Validation
或是你自己定义的 constraint
,例如 @NotNull
, @Max
, @ZipCode
, 就可以确保数据模型(JavaBean
)的正确性。constraint
可以附加到字段,getter
方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的 constraint
。Bean Validation
是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。
添加依赖
Spring Boot整合JSR-303只需要添加一个starter
即可,如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
内嵌的注解有哪些?
Bean Validation
内嵌的注解很多,基本实际开发中已经够用了,注解如下:
注解 | 详细信息 |
---|---|
@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) | 被注释的元素必须符合指定的正则表达式 |
以上是
Bean Validation
的内嵌的注解,但是Hibernate Validator
在原有的基础上也内嵌了几个注解,如下。
注解 | 详细信息 |
---|---|
被注释的元素必须是电子邮箱地址 | |
@Length | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串的必须非空 |
@Range | 被注释的元素必须在合适的范围内 |
如何使用?
参数校验分为简单校验、嵌套校验、分组校验。
简单校验
简单的校验即是没有嵌套属性,直接在需要的元素上标注约束注解即可。如下:
@Data
public class ArticleDTO {
@NotNull(message = "文章id不能为空")
@Min(value = 1,message = "文章ID不能为负数")
private Integer id;
@NotBlank(message = "文章内容不能为空")
private String content;
@NotBlank(message = "作者Id不能为空")
private String authorId;
@Fut