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.hqwc.cn/news/541775.html

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

相关文章

RocketMQ学习笔记三(黑马)大神级

课程来源:6.RocketMQ安装_哔哩哔哩_bilibili (时长:19.5h) 讲解版本:4.5版本(我是以4.8版本实践的) 目录 第一部分 核心功能 第1章 RocketMQ的下载、安装、启动和测试(Linux环境) 启动: 测试: 第2章 RocketMQ集群搭建 2.1 集群特点 2.2 集群模式 2.3 双主…

米哈游一面前端开发岗面试题,你会做几道?

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

【算法专题--双指针算法】leetcode--283. 移动零、leetcode--1089. 复写零

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1. 移动零&#xff0…

2023年全球软件质量效能大会(QECon上海站):智慧碰撞,质量与效能的新篇章(附大会核心PPT资料下载)

在数字化浪潮席卷全球的今天&#xff0c;软件行业正以前所未有的速度发展。作为推动这一进程的重要力量&#xff0c;软件质量与效能的提升显得尤为关键。2023年全球软件质量&效能大会&#xff08;QECon上海站&#xff09;的盛大召开&#xff0c;无疑为业界提供了一次难得的…

设计模式之代理模式(Proxy Pattern)【结构性模式】

为什么用结构性模式&#xff1f; 结构性模式关注点“怎样组合对象/类&#xff1f;”所以我们关注下类的组合关系类结构型模式关心类的组合&#xff0c;由多个类可以组合成一个更大的&#xff08;继承&#xff09;对象结构型模式关心类与对象的组合&#xff0c;通过关联关系在一…

第十五届蓝桥杯模拟考试III_物联网设计与开发官方代码分析

目录 前言&#xff1a;显示界面部分&#xff1a; 前言&#xff1a; 这次模拟的效果很不好。85分&#xff0c;4h的限时我花了两天完成&#xff0c;这个时间是远远超出要求的&#xff0c;而且最后还只拿到56分&#xff0c;抛开分数高低不提&#xff0c;就这个用时属实蜗牛一样的速…

【matlab】exportgraphics函数将生成的图片保存到指定文件夹中

【matlab】exportgraphics函数将生成的图片保存到指定文件夹中 使用matlab中&#xff0c;很多时候我们会生成一些图片&#xff0c;并且我们希望生成完显示出来后自动保存到指定路径&#xff0c;以下是本人常用的一个方法推荐 在Matlab中&#xff0c;exportgraphics函数用于将…

Seata 2.x 系列【8】Spring Cloud 集成客户端

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 问题演…

裸辞18K外包,面试阿里、字节全都一面挂,哭死.....

测试员可以先在外包积累经验&#xff0c;以后去大厂就很容易&#xff0c;基本不会被卡&#xff0c;事实果真如此吗&#xff1f;但是在我身上却是给了我很大一巴掌... 所谓今年今天履历只是不卡简历而已&#xff0c;如果面试答得稀烂&#xff0c;人家根本不会要你。况且要不是大…

iptables详细介绍

在 CentOS 中,iptables 是一种用于配置和管理网络防火墙的工具,它提供了一种灵活和强大的方式来控制进出服务器的网络流量。以下是 CentOS 中 iptables 的主要内容: 规则链(Chains): iptables 使用规则链来组织规则,常见的链包括: INPUT:处理进入服务器的数据包。OUTP…

固定资产管理系统:井然有序,提升利用率,降损增值的解决之道。

固定资产管理系统是一种用于管理和跟踪组织内固定资产的软件系统。固定资产是指组织长期持有并用于生产、运营或提供服务的资产&#xff0c;例如土地、建筑物、机器设备、车辆等。 固定资产管理系统提供了一种集中管理和监控固定资产的方式&#xff0c;帮助组织更好地管理其资产…

外包干了9天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2018年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…