当前位置: 首页 > news >正文

JSR303校验

校验的需求

前端请求后端接口传输参数,需要校验参数。

  1. 在controller中需要校验参数的合法性,包括:必填项校验、数据格式校验等
  2. 在service中需要校验业务规则,比如:课程已经审核过了,所以提交失败。

service中的业务规则不方便写成通用的代码,但是controller中的可以。

JSR-303定义了参数校验的规范,对bean属性进行校验。spring boot提供了JSR-303支持,即spring-boot-starter-validation

导入相关依赖

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

javax.validation.constraints包下有很多这样的校验注解,直接使用注解定义校验规则即可
在这里插入图片描述
在这里插入图片描述

实现

定义校验规则

@Data
public class AddCourseDto {@NotEmpty(message = "课程名称不能为空")@ApiModelProperty(value = "课程名称", required = true)private String name;@NotEmpty(message = "适用人群不能为空")@Size(message = "适用人群内容过少",min = 10)@ApiModelProperty(value = "适用人群", required = true)private String users;@ApiModelProperty(value = "课程标签")private String tags;@NotEmpty(message = "课程分类不能为空")@ApiModelProperty(value = "大分类", required = true)private String mt;......

开启校验

在controller方法中添加@Validated注解,开启校验

    @PostMapping("/course")public CourseBaseInfoDto createCourseBase(@RequestBody @Validated AddCourseDto addCourseDto) {Long companyId = 114514L;return courseBaseInfoService.createCourseBase(companyId, addCourseDto);}

如果校验出错Spring会抛出MethodArgumentNotValidException异常,我们需要在统一异常处理器中捕获异常,解析出异常信息。

    @ExceptionHandler(MethodArgumentNotValidException.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public RestErrorResponse exception(MethodArgumentNotValidException e) {BindingResult result = e.getBindingResult();List<String> msgList = new ArrayList<>();result.getFieldErrors().stream().forEach(item -> msgList.add(item.getDefaultMessage()));String msg = StringUtils.join(msgList, ",");log.error("【系统异常】{}", msg);return new RestErrorResponse(msg);}

测试

把必选项设置为空,发送请求。

略…

分组校验

有时在同一个属性上设置一个校验规则不能满足要求。

比如:订单编号在添加时要求为空,在修改时要求不为空。此时就需要用到分组校验,同一个属性定义多个校验规则属于不同的分组。

比如@NULL规则属于insert分组,@NotEmpty规则属于update分组。

实现

定义分组

用class类表示不同的分组,定义不同的接口类型表示不同的分组。

public class ValidationGroups {public interface Insert{};public interface Update{};public interface Delete{};
}

在定义校验规则时指定分组

      @NotEmpty(groups = {ValidationGroups.Insert.class}, message = "添加课程名称不能为空")@NotEmpty(groups = {ValidationGroups.Update.class}, message = "修改课程名称不能为空")@ApiModelProperty(value = "课程名称", required = true)private String name;

在Controller方法中启动校验规则指定要使用的分组名

    @PostMapping("/course")public CourseBaseInfoDto createCourseBase(@RequestBody @Validated({ValidationGroups.Insert.class}) AddCourseDto addCourseDto) {Long companyId = 114514L;return courseBaseInfoService.createCourseBase(companyId, addCourseDto);}

校验规则不满足使用条件

  1. 手写校验代码
  2. 自定义校验规则注解(查阅相关资料)

相关文章:

JSR303校验

校验的需求 前端请求后端接口传输参数&#xff0c;需要校验参数。 在controller中需要校验参数的合法性&#xff0c;包括&#xff1a;必填项校验、数据格式校验等在service中需要校验业务规则&#xff0c;比如&#xff1a;课程已经审核过了&#xff0c;所以提交失败。 servi…...

04 远程访问及控制

1、SSH远程管理 SSH是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。 SSH协议对通信双方的数据传输进行了加密处理&#xff08;包括用户登陆时输入得用户口令&#xff09;。 终端&#xff1a;接收用户的指令 TTY终端不能远程&#xff0c;它…...

[晕事]今天做了件晕事38 shell里的source 点号

今天碰到一个问题脚本里使用点号引入某个文件形式如下&#xff1a; . /tmp/abc但是脚本运行出现错误&#xff0c;一开始还以为是/tmp没有可执行权限&#xff08;https://mzhan017.blog.csdn.net/article/details/112178736#t16&#xff09;&#xff0c;导致abc运行不了。 后来…...

java如何分割字符串

java要实现对字符串的分割&#xff0c;需要用到split语句 语法格式是 str.split(分隔符) 其中 str是字符串 示例代码如下 public class Stringsplit {public static void main(String[] args) {String a"蒸羊羔&#xff0c;蒸熊掌&#xff0c;蒸鹿尾&#xff0c;烧花…...

胡说八道(24.6.12)——数字电子技术以及Modelsim

上回书说到数电中的最常用的表达式——逻辑表达式(由布尔代数组成)以及常用的两种图表——真值表(真值表表示的是所有的输入可能的线性组合以及输出)和卡诺图(卡诺图则是一种化简工具&#xff0c;排除冗余项&#xff0c;合并可合并项)。 今天&#xff0c;先来看看昨天说的基本逻…...

【Android面试八股文】AsyncTask中的任务是串行的还是并行的

文章目录 串行执行并行执行示例代码串行执行(默认)并行执行总结AsyncTask 的任务执行方式可以是串行的,也可以是并行的,这取决于使用的执行器 ( Executor)。 串行执行 默认情况下,AsyncTask 使用的是 SERIAL_EXECUTOR,即任务按顺序一个接一个地执行。这意味着下一个任务…...

无人机RTMP推流EasyDSS直播平台推流成功,不显示直播按钮是什么原因?

互联网视频云平台/视频点播直播/视频推拉流EasyDSS支持HTTP、HLS、RTMP等播出协议&#xff0c;并且兼容多终端&#xff0c;如Windows、Android、iOS、Mac等。为了便于用户集成与二次开发&#xff0c;我们也提供了API接口供用户调用和集成。在无人机场景上&#xff0c;可以通过E…...

经验分享,xps格式转成pdf格式

XPS 是一种电子文档格式、后台打印文件格式和页面描述语言。有时候微软默认打印机保存的是xps格式&#xff0c;我们如何转换为pdf格式呢&#xff0c;这里分享一个免费好用的网站&#xff0c;可以实现。 网站&#xff1a;https://xpstopdf.com/zh/ 截图&#xff1a;...

基于51单片机的音乐彩灯设计

基于51单片机的音乐彩灯设计 &#xff08;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 由STC单片机ADC0809模块LM386功放模块喇叭音频接口发光二极管电源构成 1.通过音频线输入可以播放电脑、手机、MP3里面的音乐。 2.AD对音频…...

API接口设计的艺术:如何提升用户体验和系统性能

在数字时代&#xff0c;API接口的设计对于用户体验和系统性能有着至关重要的影响。良好的设计可以显著提升应用程序的响应速度、可靠性和易用性。以下是几个关键点&#xff0c;帮助改善API接口的设计&#xff1a; 1. 理解并定义清晰的要求 用户研究&#xff1a;与最终用户进行…...

韩兴国/姜勇团队在《Trends in Plant Science》发表植物根系氮素再分配的观点文章!

氮素是陆地生态系统中的关键限制性营养元素&#xff0c;通过生物固氮和土壤氮供应通常远低高等植物的氮需求。当土壤氮素供应无法充分满足植物茎叶生长需求时&#xff0c;植物会通过自身营养器官&#xff08;如根或根茎&#xff09;再分配来实现氮的内部循环和再利用。尽管植物…...

52.Python-web框架-Django - 多语言编译-fuzzy错误

目录 1.起因 2.原因 3.解决方法 3.1手动移除fuzzy标记 3.2重新生成po文件&#xff0c;并检查是否还存在fuzzy标记 3.3重新编译生成mo文件 1.起因 在Django的国际化和本地化过程中&#xff0c;当你发现某些字段仅显示msgid&#xff0c;而不显示msgstr时&#xff0c;可能是…...

Linux自旋锁

面对没有获取锁的现场&#xff0c;通常有两种处理方式。 互斥锁&#xff1a;堵塞自己&#xff0c;等待重新调度请求自旋锁&#xff1a;循环等待该锁是否已经释放 本文主要讲述自旋锁 自旋锁其实是一种很乐观的锁&#xff0c;他认为只要再等一下下锁便能释放&#xff0c;避免…...

服务器----阿里云服务器重启或关机,远程连接进不去,个人博客无法打开

问题描述 在使用阿里云免费的新加坡服务器时&#xff0c;发现重启或者是关机在开服务器后&#xff0c;就会出现远程连接不上、个人博客访问不了等问题 解决方法 进入救援模式连接主机&#xff0c;用户名是root&#xff0c;密码是自己设置的 点击访问博客查看更多内容...

go 定时任务

在 Go 语言中&#xff0c;可以使用内置的 time 包来实现定时任务。以下是一个简单的示例&#xff1a; go package main import ( "fmt" "time" ) func main() { timer : time.NewTimer(2 * time.Second) <-timer.C fmt.Println(…...

Java Character 类

Java Character 类 Character 类用于对单个字符进行操作。 Character 类在对象中包装一个基本类型 char 的值 char ch a;// Unicode 字符表示形式char uniChar \u039A; // 字符数组char[] charArray { a, b, c, d, e };然而&#xff0c;在实际开发过程中&#xff0c;我们经…...

MQTT协议应用场景

MQTT协议的应用场景非常丰富&#xff0c;特别是在物联网领域。以下是对MQTT协议应用场景的清晰归纳&#xff1a; 1.物联网设备控制和监控&#xff1a;MQTT被广泛应用于物联网设备之间的通信&#xff0c;如智能家居、智能城市和工业自动化等领域。设备可以发布自身状态到特定主题…...

3.4.马氏链-随机游走的常返性

随机游走的常返态 1. 随机游走常返性定义1.1. 随机游走常返值和可能集1.2. 随机游走常返性2. 简单随机游走: 维数与常返性的关系2.1. 简单随机游走2.2. 二维及以下简单随机游走常返, 三维及以上简单随机游走非常返3. 随机游走 ( d ≤ 2 ) (d\leq 2) (d≤2): 常返的充分条件4. 随…...

HOT100与剑指Offer

文章目录 前言一、41. 缺失的第一个正数&#xff08;HOT100&#xff09;二、6. 从尾到头打印链表&#xff08;剑指Offer&#xff09;总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划刷完hot100和剑指Offer的刷题计划&#xff0c;加油&#xff01; 根…...

【AI开发】CRAG、Self-RAG、Adaptive-RAG

先放一张基础RAG的流程图 https://blog.langchain.dev/agentic-rag-with-langgraph/ 再放一个CRAG和self-RAG的LangChain官方博客 Corrective RAG(CRAG) 首先需要知道的是CRAG的特色发生在retrieval阶段的最后开始&#xff0c;即当我们获得到了近似的document&#xff08;或者…...

从STM32到华大HC32F460:USB HOST MSC + FatFs R0.13c移植避坑全记录

从STM32到华大HC32F460&#xff1a;USB HOST MSC FatFs R0.13c移植实战指南 作为一名长期使用STM32的嵌入式开发者&#xff0c;第一次接触华大半导体的HC32F460系列MCU时&#xff0c;既兴奋又忐忑。兴奋的是国产MCU的性能已经能够媲美国际大厂&#xff0c;忐忑的是生态差异带来…...

别再让UDP丢包坑了你!手把手教你用C语言实现应用层分包组包(附完整代码)

从零构建高可靠UDP传输&#xff1a;C语言实现应用层分包组包实战指南 在实时音视频、在线游戏等对延迟极度敏感的领域&#xff0c;UDP协议因其无连接、低开销的特性成为首选。但许多开发者第一次使用UDP发送大文件时都会遇到这样的场景&#xff1a;明明局域网测试一切正常&…...

图像处理核心技术:分辨率、信噪比与形态学算法解析

1. 图像处理基础概念解析在数字图像处理领域&#xff0c;我们经常需要面对几个核心问题&#xff1a;如何量化系统的分辨能力&#xff1f;如何评估图像质量&#xff1f;如何从噪声中提取有用信息&#xff1f;这些问题的答案构成了现代图像处理技术的理论基础。作为一名从业十余年…...

C#循环入门指南:从0到1掌握循环逻辑

一、for循环&#xff1a;已知循环次数&#xff0c;首选它for循环是最常用、最规范的循环&#xff0c;适合已知循环次数的场景&#xff08;比如打印10遍文字、计算1到100的和&#xff09;。它的结构很固定&#xff0c;就像一个“固定流程的重复机器”&#xff0c;一步都不会乱。…...

XUnity.AutoTranslator完整指南:为Unity游戏实现实时自动翻译的终极解决方案

XUnity.AutoTranslator完整指南&#xff1a;为Unity游戏实现实时自动翻译的终极解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而无法畅玩心爱的日系RPG或欧美独立游戏&a…...

基于MCP协议与Playwright的AI智能体网页抓取工具部署与实战

1. 项目概述&#xff1a;一个为AI智能体打造的“网页抓取工具箱” 如果你正在开发或使用基于MCP&#xff08;Model Context Protocol&#xff09;的AI智能体&#xff0c;并且经常需要让它们从网页上获取结构化数据&#xff0c;那么你很可能已经遇到了一个核心痛点&#xff1a; …...

44《实车CAN总线报文ID含义与数据初步解读》

001、CAN总线基础与实车网络拓扑概述 从一次凌晨三点的“丢帧”说起 去年冬天,某主机厂的新能源车型在做冬季标定。凌晨三点,测试工程师打来电话,语气里带着疲惫和焦躁:“VCU发的车速信号,BMS偶尔收不到,但用CANoe监控又一切正常。”我赶到现场,第一件事不是看代码,而…...

从绝圣弃智到少造机关,老子这一句放进 SAP HANA 开发里,讲的是把聪明收回到模型、数据和执行计划本身

在 SAP HANA 项目里,最容易让团队误判的场景,往往不是某个开发人员不会写 SQL,也不是不会建 Calculation View,而是大家太相信自己的聪明。一个销售分析报表慢了,开发人员立刻想写一段复杂的 SQLScript;一个库存可用量计算不准,团队又想加一层临时表;一个财务口径有争议…...

告别网盘限速!3步搞定百度网盘高速下载秘籍

告别网盘限速&#xff01;3步搞定百度网盘高速下载秘籍 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的龟速下载而烦恼吗&#xff1f;每次看到那几十KB/s的速…...

半导体设备再流通:破解成熟制程产能瓶颈与供应链韧性难题

1. 项目概述&#xff1a;为什么晶圆厂需要工具再流通&#xff1f;在芯片行业摸爬滚打了十几年&#xff0c;我见过太多因为一台关键设备宕机&#xff0c;导致整条产线停摆&#xff0c;最终引发下游客户“断粮”数月的惨痛案例。大家可能觉得&#xff0c;疫情时期的“芯片荒”已经…...