SpringBoot之自定义注解参数校验
为什么要自定义注解
我这里先引入一个例子,就比如我现在要写文章,文章也许写完正要发布,也可以是还没写完正要存草稿,前端往后端发送数据,如果前端的state不是草稿或者已发布状态,后端就没办法根据前端所传入的值操作
这是如果有加上校验的话,如果前端传递的不符合规范那么就会不通过,不会执行后续及数据库层操作
此为成功图片
@Data
public class Article {
private Integer id;//主键ID
@NotEmpty
@Pattern(regexp = "^\\S{1,10}$")
private String title;//文章标题
@NotEmpty
private String content;//文章内容
@NotEmpty
@URL
private String coverImg;//封面图像
@State
private String state;//发布状态 已发布|草稿
private Integer categoryId;//文章分类id
private Integer createUser;//创建人ID
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
这段代码是一个Java类,定义了一个名为Article
的数据模型,用于表示文章对象。让我来解释一下各个部分的含义:
id
: 文章的主键ID,用于唯一标识一篇文章。title
: 文章的标题,使用了@NotEmpty
注解确保标题不为空,并且使用了@Pattern
注解指定了标题的格式限制,即长度在1到10之间,并且不能包含空格。content
: 文章的内容,也使用了@NotEmpty
注解确保内容不为空。coverImg
: 文章的封面图像,使用了@NotEmpty
注解确保封面图像不为空,并且使用了@URL
注解确保封面图像的格式是一个合法的URL链接。state
: 文章的发布状态,可以是已发布或者草稿状态。但是这里没有直接使用Java内置的注解,而是使用了一个自定义的@State
注解,可能是作者自己定义的一个注解,用于限制状态的取值范围。categoryId
: 文章的分类ID,用于标识文章所属的分类。createUser
: 文章的创建人ID,用于记录创建该文章的用户。createTime
: 文章的创建时间,记录文章的创建时间。updateTime
: 文章的更新时间,记录文章的更新时间。
总体来说,这段代码定义了一个文章对象的数据模型,包括了文章的各个属性和相关的约束条件。
package org.itheima.anno;
import org.itheima.validation.StateValidation;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented//元注解
@Target({FIELD})//元注解
@Retention(RUNTIME)//元注解
@Constraint(validatedBy = {StateValidation.class})//指定提供校验规则的类
public @interface State {
//提供校验失败后的提示信息
String message() default "state参数的值只能是已发布或者草稿";
//指定分组
Class<?>[] groups() default { };
//负载 获取到State注解的附加信息
Class<? extends Payload>[] payload() default { };
}
这段代码是一个自定义注解 @State
的定义,让我逐条解释一下:
@Documented
: 这是一个元注解,用于指示该注解应该被包含在文档中。@Target({FIELD})
: 这也是一个元注解,指定了该注解可以应用在字段上。@Retention(RUNTIME)
: 这是一个元注解,指定了该注解应该在运行时保留,以便在运行时可以通过反射获取注解信息。@Constraint(validatedBy = {StateValidation.class})
: 这是一个约束注解,用于指定提供校验规则的类,即StateValidation
类。
接下来是注解的成员:
message()
: 这是一个成员方法,用于提供校验失败后的提示信息,默认值是"state参数的值只能是已发布或者草稿"
,表示如果校验失败,将会输出这个提示信息。groups()
: 这是一个成员方法,指定了分组,用于分组校验。payload()
: 这是一个成员方法,用于负载,即获取到State
注解的附加信息。
总体来说,这个自定义注解 @State
主要用于对文章的发布状态进行校验,在字段上使用该注解可以限制状态值只能是已发布或者草稿,同时提供了校验失败后的提示信息和其他一些元信息。