SpringBoot之自定义注解参数校验

SpringBoot之自定义注解参数校验

dasdas

为什么要自定义注解

我这里先引入一个例子,就比如我现在要写文章,文章也许写完正要发布,也可以是还没写完正要存草稿,前端往后端发送数据,如果前端的state不是草稿或者已发布状态,后端就没办法根据前端所传入的值操作

校验
这是如果有加上校验的话,如果前端传递的不符合规范那么就会不通过,不会执行后续及数据库层操作
例子
此为成功图片
在这里插入图片描述
在这里插入图片描述

@Data
public class Article {private Integer id;//主键ID@NotEmpty@Pattern(regexp = "^\\S{1,10}$")private String title;//文章标题@NotEmptyprivate String content;//文章内容@NotEmpty@URLprivate String coverImg;//封面图像@Stateprivate String state;//发布状态 已发布|草稿private Integer categoryId;//文章分类idprivate Integer createUser;//创建人IDprivate 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 主要用于对文章的发布状态进行校验,在字段上使用该注解可以限制状态值只能是已发布或者草稿,同时提供了校验失败后的提示信息和其他一些元信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/660538.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3、element-plus递归实现动态菜单

vue3、element-plus递归实现动态菜单 使用场景&#xff1a;动态菜单为什么使用递归递归在动态菜单中的实现 使用场景&#xff1a;动态菜单 动态菜单是指菜单项的数量和层次结构可能是动态的&#xff0c;通常来自后端或用户输入。这些菜单的特征包括&#xff1a; 多层嵌套&…

笔记-PPT绘图导出高清无失真图片

问题描述&#xff1a;PPT绘图已经用了高清图&#xff08;jpg、tif格式&#xff09;&#xff0c;但论文图片还是不清晰&#xff0c;打印出来还是有点糊 以下是PPT导出高清不失真图片&#xff08;emf格式&#xff09;的具体描述。 目录 一、绘图工具二、操作步骤 一、绘图工具 …

SSH远程登录实操实验!

ssh远程登录协议&#xff1a;默认端口号22 以下实验7-2是服务端&#xff0c;7-1是客户端 服务器的相关信息&#xff1a; 服务名称&#xff1a;sshd 服务端主程序&#xff1a;/usr/sbin/sshd 服务端配置文件&#xff1a;/etc/ssh/sshd_config 客户端相关信息&#xff1a; …

SQL如何利用Bitmap思想优化array_contains()函数

目录 0 问题描述 1 位图思想 2 案例实战 3 小结 0 问题描述 在工作中&#xff0c;我们往往使用array_contains()函数来进行存在性问题分析&#xff0c;如判断某个数是否在某个数组中&#xff0c;但是当表数据量过多&#xff0c;存在大量array_contains()函数时&#xff0c;…

未来已来:深入探索LLAMA3驱动的人工智能革命

大家好&#xff01;相信大家对于AI&#xff08;人工智能&#xff09;的发展已经有了一定的了解&#xff0c;但你是否意识到&#xff0c;到了2024年&#xff0c;AI已经变得如此强大和普及&#xff0c;带来了我们从未想象过的便利和创新呢&#xff1f;让我们一起来看看AI在这个时…

Open CASCADE学习|BRepFill_SectionPlacement

BRepFill_SectionPlacement 是一个与计算机辅助设计&#xff08;CAD&#xff09;相关的术语&#xff0c;通常用于指代一个几何对象或操作&#xff0c;它是Open CASCADE Technology&#xff08;OCCT&#xff09;中的一个类。Open CASCADE Technology是一个开源的CAD内核&#xf…

HOOPS Exchange导入数据时如何使用CATIA缓存选项?

1、什么是CATIA缓存选项和CGR文件&#xff1f; CATIA V5默认的工作方式是加载几何图形。加载大型程序集时&#xff0c;这可能会导致性能下降&#xff0c;因为所需的内存很重要。 在这种情况下&#xff0c;我们可能需要使用缓存选项。这将生成仅包含曲面细分数据而不包含几何图…

图片懒加载:提升网页性能的秘诀

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Centos7+Hadoop3.3.4+KDC1.15+Ranger2.4.0集成

一、集群规划 本次测试采用3台虚拟机&#xff0c;操作系统版本为centos7.6。 kerberos采用默认YUM源安装&#xff0c;版本为&#xff1a;1.15.1-55 Ranger版本为2.4.0 系统用户为ranger:ranger IP地址主机名KDCRanger192.168.121.101node101.cc.localKDC masterRanger Admin…

AI图书推荐:将 ChatGPT和Excel融合倍增工作效率

《将 ChatGPT和Excel融合倍增工作效率》&#xff08; Hands-on ChatGPT in Excel. Enhance Your Excel Workbooks&#xff09;由Mitja Martini撰写&#xff0c;旨在教授读者如何将ChatGPT与Excel结合使用&#xff0c;以提升工作效率和创造AI增强的Excel工具。它还提供了Excel中…

Apache DolphinScheduler支持Flink吗?

随着大数据技术的快速发展&#xff0c;很多企业开始将Flink引入到生产环境中&#xff0c;以满足日益复杂的数据处理需求。而作为一款企业级的数据调度平台&#xff0c;Apache DolphinScheduler也跟上了时代步伐&#xff0c;推出了对Flink任务类型的支持。 Flink是一个开源的分…

【练习1】

1.字符串最后一个单词的长度 #include <iostream> #include<string> using namespace std;int main() {string a;int res,i,flag;flag1;i0;getline(cin,a);res0;while(flag1){if(a[i]! ){resres1;}else{res0;}if(ia.length()-1){flag-1;}i;}cout<<res<<…