SpringBoot之自定义注解参数校验

简介: SpringBoot之自定义注解参数校验

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 主要用于对文章的发布状态进行校验,在字段上使用该注解可以限制状态值只能是已发布或者草稿,同时提供了校验失败后的提示信息和其他一些元信息。


相关文章
|
5天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
21 0
|
24天前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
|
12天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
36 4
SpringBoot必须掌握的常用注解!
|
14天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
54 2
|
14天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
28 1
|
29天前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
9天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
8 0
|
21天前
|
存储 Java 数据管理
强大!用 @Audited 注解增强 Spring Boot 应用,打造健壮的数据审计功能
本文深入介绍了如何在Spring Boot应用中使用`@Audited`注解和`spring-data-envers`实现数据审计功能,涵盖从添加依赖、配置实体类到查询审计数据的具体步骤,助力开发人员构建更加透明、合规的应用系统。
|
前端开发 Java 索引
SpringBoot 常用注解
SpringBoot 常用注解
SpringBoot 常用注解
|
前端开发 Java 索引
40 个 SpringBoot 常用注解,你知道几个?
40 个 SpringBoot 常用注解,你知道几个?
156 0
40 个 SpringBoot 常用注解,你知道几个?