Springboot——JSR303校验

1. 请求参数的合法性校验

使用基于JSR303的校验框架实现,Springboot提供了JSR-303的支持,它就是spring-boot-starter-validation,他包括了很多的校验规则,只需要在模型中通过注解指定校验规则,在Controller方法上开启校验

2. JSR303的使用

比如说我们需要对我们的参数进行校验,为了代码的整洁性和美观性,又不想进行异常处理,这时就需要使用JSR303校验框架

2.1 接口参数前添加@Validated注解

    @ApiOperation("新增课程基础信息")@PostMapping("/course")public CourseBaseInfoDto createCourseBase(@RequestBody @Validated AddCourseDto addCourseDto) {//机构idLong companyId = 1232141425L;CourseBaseInfoDto courseBase = courseBaseInfoService.createCourseBase(companyId, addCourseDto);return courseBase;}

2.2 在参数模型中进行处理

比如

@Data
@ApiModel(value="AddCourseDto", description="新增课程基本信息")
public class AddCourseDto {@NotEmpty(message = "新增课程名称不能为空")@ApiModelProperty(value = "课程名称", required = true)private String name;}

2.3 进行全局异常处理

    //MethodArgumentNotValidException@ExceptionHandler(MethodArgumentNotValidException.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)@ResponseBodypublic RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e){BindingResult bindingResult = e.getBindingResult();//存放错误信息List<String> errors = new ArrayList<>();bindingResult.getFieldErrors().stream().forEach(item ->{errors.add(item.getDefaultMessage());});//将list当中的错误信息拼接起来String errMessage = StringUtils.join(errors, ",");//记录异常log.error("系统异常{}",e.getMessage(),e);//解析出异常信息RestErrorResponse restErrorResponse = new RestErrorResponse(errMessage);return restErrorResponse;}

在这里插入图片描述
对于异常返回模型,请参照上个异常处理文章,有详情代码

3. 分组校验

如果对同一类型参数有两种校验,比如说添加课程,和更新课程,参数一样,但是校验的规则不一样,此时,就要用到分组校验

3.1 分组校验操作

3.1.1 设置分组类

/*** 用于分组检验*/
public class ValidationGroups {public interface Insert{};public interface Update{};public interface Delete{};
}

3.1.2 接口参数前表明校验组

下列代码表明参数的校验遵从的是添加组规则

    @ApiOperation("新增课程基础信息")@PostMapping("/course")public CourseBaseInfoDto createCourseBase(@RequestBody @Validated(ValidationGroups.Insert.class) AddCourseDto addCourseDto) {//机构idLong companyId = 1232141425L;CourseBaseInfoDto courseBase = courseBaseInfoService.createCourseBase(companyId, addCourseDto);return courseBase;}

3.1.2 接口模型中进行分组的校验规则

如下

@Data
@ApiModel(value="AddCourseDto", description="新增课程基本信息")
public class AddCourseDto {@NotEmpty(message = "新增课程名称不能为空",groups = {ValidationGroups.Insert.class})@NotEmpty(message = "修改课程名称不能为空",groups = {ValidationGroups.Update.class})@ApiModelProperty(value = "课程名称", required = true)private String name;}

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

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

相关文章

卫星参数转换之二行转轨道六根数转经纬度坐标

生命无罪&#xff0c;健康万岁&#xff0c;我是laity。 我曾七次鄙视自己的灵魂&#xff1a; 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它在空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之…

Linux关机和重启指令

关机 立即关机指令如下&#xff0c; sudo shutdown -h now 延迟关机指令如下&#xff0c;&#xff08;5表示5分钟后执行该操作&#xff09; sudo shutdown -h 5 重启 立即重启指令如下&#xff0c; sudo shutdown -r now 延迟重启指令如下&#xff0c; sudo shutdow…

【Android】源码中的工厂方法模式

本文是基于 Android 14 的源码解析 工厂方法模式应用很广泛&#xff0c;我们平时开发中经常会使用到的数据结构中其实也隐藏着对工厂方法模式的应用&#xff0c;以 List 和 Set 为例&#xff0c;List 和 Set 都继承于 Collection 接口&#xff0c;而 Collection 接口继承于 Ite…

头歌-贪心算法

第1关 找零钱 任务描述 本关任务&#xff1a;设计一个贪婪算法&#xff0c;使得找的钱币张数最少。 商店售货员找给 1 个顾客 n 元&#xff0c;用以下七种面值的纸币&#xff1a;100 元&#xff0c;50 元&#xff0c;20 元&#xff0c;10 元&#xff0c;5 元&#xff0c;2 …

激活函数理解

前言 为什么神经网中非要有各种各样的激活函数&#xff1f;他们有什么用&#xff1f;没有他们会怎样&#xff1f;常见的激活函数有哪些&#xff0c;他们都有什么特点&#xff1f; 如果我们不运用激活函数&#xff0c;神经网络的输出信号将仅仅是一个简单的线性函数。线性方程…

Docker 容器化技术:构建高效、可移植的开发环境和部署流程|Docker 网络

为了支持网络协议栈的多个实例&#xff0c;Linux 在网络协议栈中引入了网络命名空间。这些独立的协议栈被隔离到不同的命名空间中&#xff0c;处于不同命名空间中的网络协议栈是完全隔离的&#xff0c;彼此无法通信。通过对网络资源的隔离&#xff0c;就能在一台宿主机上虚拟多…

L1-019 谁先倒(Java)

一、题目描述&#xff1a; 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为&#xff1a;每人口中喊出一个数字&#xff0c;同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和&#xff0c;谁就输了&#xff0c;输家罚一杯酒。两人同赢或…

android 事件分发笔记

这是学习笔记,以我看得明白为主。 分为 view.dispatchTouchEvent,---只有事件的处理逻辑 ----- ViewGroup.dispatchTouchEvent---实现了分发流程的逻辑 事件接收流程 setView#ViewRootImpl.java //接收事件的方法 ------> new WindowInputEventReceiver(inputChann…

FFmepg--视频编码流程--yuv编码为h264

文章目录 基本概念流程api核心代码 基本概念 YUV格式&#xff1a;是一种颜色编码方式&#xff0c;YUV分别为三个分量&#xff1a;‘Y’是明亮度&#xff0c;也就是灰度值&#xff1b;‘U’和‘V’是色度 YUV格式的分类&#xff1a; planar的YUV格式&#xff1a;先存储planar的…

初步了解序列化和反序列化

01什么是序列化和反序列化 序列化是将对象转化为字符串以便存储的一种方式。而反序列化恰好是序列化的逆过程&#xff0c;反序列化会将字符串转化为对象供程序使用。 常见的php系列化和反系列化方式主要有&#xff1a;serialize&#xff0c;unserialize&#xff1b;json_enco…

【运维开发岗面试题1】

目录 mkdir -p 中-p 是干什么的&#xff1f;df -h 和 du -h 命令作用&#xff1f;磁盘管理你都用到过什么命令&#xff1f;cp 和 mv 是干什么的&#xff1f;有什么区别内存大小怎么查看&#xff1f;查看内存的运行情况&#xff1f;怎么查看内存&#xff1f;进程杀不掉怎么办如何…

姿态旋转的哥氏定理以及速度微分的推导

姿态旋转中涉及到坐标系的转换&#xff0c;在有相对旋转的两个坐标系中观察一个向量的变化&#xff0c;用到了哥氏定理。 例如在i系中观察e系下的运动&#xff0c;则 哥氏定理的公式 wie是e相对于i的角运动 注意符号i在前e在后。 wie是e相对于i的角运动 注意符号i在前e在…

各个类型和Json类型的相互转换

ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)是Jackson的主要类&#xff0c;它可以帮助我们快速的进行各个类型和Json类型的相互转换。 对应maven&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId&…

【驱动】编译内核时报错:multiple definition of `yylloc‘

1、问题描述 在Ubuntu22.04中编译Linux kernel4.9源码时报错: /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here collect2: error: ld returned 1 exit status make[2…

R语言:如何基于地球外辐射(Ra)和相对日照(n/N)计算太阳辐射Rs?

正在编写相关软著&#xff0c;借此机会了解R语言的基本语法和一些处理流程&#xff0c;所以解释稍微繁琐。 Note&#xff1a; 使用的R语言版本是 R version 4.3.2 (2023-10-31 ucrt) 使用的RStudio编辑器版本是&#xff1a; 01 基于随机森林的插值填补缺失值 这是目前处理…

深入探索C与C++的混合编程

实现混合编程的技术细节 混合使用C和C可能由多种原因驱动。一方面&#xff0c;现有的大量优秀C语言库为特定任务提供了高效的解决方案&#xff0c;将这些库直接应用于C项目中可以节省大量的开发时间和成本。另一方面&#xff0c;C的高级特性如类、模板和异常处理等&#xff0c;…

mysql数据库中查询重复数据和去重数据

文章目录 1.查找重复数据2. 查到重复组的唯一数据3.删除重复数据4.注意重复的内容和删除的记录数是否一致 1.查找重复数据 select gene_entrez_id,count(*) a from diag_gene GROUP BY gene_entrez_id HAVING a > 12. 查到重复组的唯一数据 原理 分组后如果组内多个数据…

跨境电商干货|如何在Snapchat上做电商?

Snapchat是一个与用户互动与创意内容为主的平台&#xff0c;也因其广阔的受众群体广受跨境电商卖家的喜爱&#xff0c;成为跨境出海的热门渠道之一。本文将为大家分享&#xff0c;要在Snapchat上进行电子商务&#xff0c;可以遵循以下步骤&#xff1a; 1、创建商业账户 在Snap…

卷积的九大变体算法

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 引言 卷积神经网络&#xff08;CNN&#xff09;的核心在于其多样化的卷积技术&#xff0c;每种技术针对不同的应用和性能需求有着独特的优势。逐…

力扣46. 全排列

Problem: 46. 全排列 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 回溯可以理解为是在对一个多叉树的操作 1.回溯结束条件&#xff1a;当决策路径的长度等于nums数组的长度时&#xff0c;将当前的结果添加到二维结果集res中&#xff1b; 2.每一次决策的选择处…