Spring后端参数校验——自定义校验方式(validation)

文章目录

    • 开发场景
    • 技术名词解释——Spring Validation
      • 自定义校验
    • 技术细节
    • 小结
      • 1.实体参数校验
      • 2.自定义校验
    • 完整代码

开发场景

业务场景:新增文章

基本信息

请求路径:/article

请求方式:POST

接口描述:该接口用于新增文章(发布文章)

请求参数

请求参数格式:application/json

请求参数说明:

参数名称说明类型是否必须备注
title文章标题string1~10个非空字符
content文章正文string
coverImg封面图像地址string必须是url地址
state发布状态string已发布 | 草稿
categoryId文章分类IDnumber

请求数据样例:

{"title": "陕西旅游攻略","content": "兵马俑,华清池,法门寺,华山...爱去哪去哪...","coverImg": "https://big-event-gwd.oss-cn-beijing.aliyuncs.com/9bf1cf5b-1420-4c1b-91ad-e0f4631cbed4.png","state": "草稿","categoryId": 2
}

参数校验请求参数中要求必要的信息
此时的参数

技术名词解释——Spring Validation

提示:这里可以添加技术名词解释

Spring 提供的一个参数校验框架,使用预定义的注解完成参数校验

1、引入Spring Validation 起步依赖
2、在参数前面添加@Pattern注解
3、在Controller类上添加@Validated注解

引入依赖
在这里插入图片描述

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

添加注解
在这里插入图片描述

自定义校验

已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)

技术细节

1、自定义注解State
2、自定义校验数据的类StateValidation 实现ConstraintValidator接口
3、 在需要校验的地方使用自定义注解

① 自定义注解State
在这里插入图片描述
② 自定义校验数据的类StateValidation 实现ConstraintValidator接口
在这里插入图片描述
③ 在需要校验的地方使用自定义注解
在这里插入图片描述
④ 传参加@Validated

小结

提示:这里可以添加总结

1.实体参数校验

在这里插入图片描述

2.自定义校验

在这里插入图片描述

完整代码

1、注解State

import com.shisan.validation.StateValidation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;import java.lang.annotation.*;/*** @Author:shisan @Date:2024/5/8 21:07*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {StateValidation.class})
public @interface State {// 提供校验的条件,这里只校验是否为已发布或草稿String message() default "state参数只能是已发布或草稿";// 指定分组Class<?>[] groups() default {};// 负载Class<? extends Payload>[] payload() default {};
}

2、自定义校验数据的类StateValidation 实现ConstraintValidator接口

import com.shisan.anno.State;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;/*** @Author:shisan* @Date:2024/5/8 21:10*/
public class StateValidation implements ConstraintValidator<State, String> {/**** @param value 将来要检验的数据* @param constraintValidatorContext* @return 如果返回true,则校验通过,否则校验失败*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {// 提供校验if(value == null || value.length() == 0){return false;}if(value.equals("已发布") || value.equals("草稿") ){return true;}return false;}
}

3、实体类添加注解

import com.shisan.anno.State;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import org.hibernate.validator.constraints.URL;import java.time.LocalDateTime;/*** @Author:shisan @Date:2024/5/6 15:32*/
@Data
public class Article {private Integer id; // 主键id// 1~10个非空字符串@NotEmpty(message = "标题不能为空")@Pattern(regexp = "^.{1,10}$", message = "标题格式不正确")private String title; // 文章标题@NotEmpty(message = "内容不能为空")private String content; // 文章内容// 必须是url地址@NotNull(message = "封面图片不能为空")@URLprivate String coverImg; // 封面图片@State private String state; // 发布状态 1 发布 0 草稿@NotNull(message = "分类不能为空")private Integer categoryId; // 文章idprivate Integer createUser; // 发布人idprivate LocalDateTime createTime; // 发布时间private LocalDateTime updateTime; // 修改时间
}

4、控制层添加@Validated

import com.shisan.pojo.Article;
import com.shisan.pojo.Result;
import com.shisan.service.ArticleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;/*** @Author:shisan @Date:2024/5/8 10:51*/
@RestController
@RequestMapping("/article")
@Slf4j
public class ArticleController {@Autowired private ArticleService articleService;/*** 请求路径:/article** <p>请求方式:POST** <p>接口描述:该接口用于新增文章(发布文章)*/@PostMappingpublic Result addArticle(@RequestBody  @Validated Article article) {log.info("新增文章:{}", article);return articleService.addArticle(article);}
}

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

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

相关文章

三、VGA接口驱动与图像显示动态移动

文章目录 一、参数介绍二、彩条显示2.1 模块系统架构框图2.2 行、场同步波形:2.3 代码三、VGA 图像显示动态移动3.1波形设计3.2代码 一、参数介绍 对于普通的 VGA 显示器&#xff0c;共有 5 个信号&#xff1a;R、G、B 三基色&#xff1b;HS&#xff08;行同步信号&#xff09…

物联网实战--平台篇之(四)账户后台交互

目录 一、交互逻辑 二、请求验证码 三、帐号注册 四、帐号/验证码登录 五、重置密码 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631…

C++:AVL树

概念&#xff1a; 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下。 如图所示&#xff0c;搜索二叉树不能面对右边的树&#xff0c;这种极端的情况&#xf…

【面试干货】http请求报文的组成与作用?

【面试干货】http请求报文的组成与作用&#xff1f; 一、http 的请求报文组成二、请求行&#xff08;Request Line&#xff09;三、请求头部&#xff08;Request Headers&#xff09;四、请求体&#xff08;Request Body&#xff09;五、响应头部 &#xff08;Response Headers…

DBdoctor产品介绍

基本信息 DBdoctor是聚好看科技股份有限公司自主研发的一款数据库内核级性能诊断工具&#xff0c;首次将eBPF技术聚焦在了数据库领域&#xff0c;一分钟内定位数据库性能问题并给出优化建议&#xff0c;实现数据库性能诊断百倍提效。 免费下载 请在PC端打开以下链接&#x…

通过AOP实现项目中业务服务降级功能

最近项目中需要增强系统的可靠性&#xff0c;比如某远程服务宕机或者网络抖动引起服务不可用&#xff0c;需要从本地或者其它地方获取业务数据&#xff0c;保证业务的连续稳定性等等。这里简单记录下业务实现&#xff0c;主要我们项目中调用远程接口失败时&#xff0c;需要从本…

JavaScript异步编程——04-同源和跨域

同源和跨域 同源 同源策略是浏览器的一种安全策略&#xff0c;所谓同源是指&#xff0c;域名&#xff0c;协议&#xff0c;端口完全相同。 跨域问题的解决方案 从我自己的网站访问别人网站的内容&#xff0c;就叫跨域。 出于安全性考虑&#xff0c;浏览器不允许ajax跨域获取…

泛型编程四:容器

文章目录 前言一、序列容器verctor 总结 前言 STL有六大部件&#xff0c;容器、算法、仿函数、迭代器、适配器和分配器。除了算法是函数模板&#xff0c;其他都是类模板。容器可以分为序列容器和关联容器。常见的序列容器有vector、array、deque、list、forward-list&#xff…

微信小程序开发-数据事件绑定

&#x1f433;简介 数据绑定 数据绑定是一种将小程序中的数据与页面元素关联起来的技术&#xff0c;使得当数据变化时&#xff0c;页面元素能够自动更新。这通常使用特定的语法&#xff08;如双大括号 {{ }}&#xff09;来实现&#xff0c;以便在页面上展示动态数据。 事件绑…

js如何控制一次只加载一张图片,加载完成后再加载下一张

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 原文&#xff1a;https://juejin.cn/post/7340167256267391012 今天看到一个面试题&#xff0c;是关于img图片加载方面的&#xff0c;有必要记录一下。其实关于这个问题&#xff0c;只要知道图片什么时候加载完成就…

关于行进线路。

https://map.tianditu.gov.cn/ 作者&#xff1a;Chockhugh 链接&#xff1a;https://www.zhihu.com/question/20545559/answer/494685117 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 以50km&#xff0c;几乎全是…

商务分析方法与工具(五):Python的趣味快捷-文件和文件夹操作自动化

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…