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


相关文章
|
11月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
1598 128
|
10月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
803 2
|
11月前
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
708 12
|
11月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
616 0
探索Spring Boot的@Conditional注解的上下文配置
|
JSON 前端开发 Java
SpringBoot自定义异常,优雅解决业务逻辑中的错误
SpringBoot自定义异常,优雅解决业务逻辑中的错误
6992 0
SpringBoot自定义异常,优雅解决业务逻辑中的错误
|
10月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
10月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
10月前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。
|
10月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。