在springboot中引入参数校验

一、概要

一般我们判断前端传过来的参数,需要对某些值进行判断,是否满足条件。

而springboot相关的参数校验注解,可以解决我们这个问题。

二、快速开始

首先,我用的springboot版本是  3.1.5 

引入参数校验相关依赖

<!--1.导入JSR303规范--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

定义实体类,并在实体类上加入相关注解。

public class Dept {private Integer id; //ID@NotNullprivate String name; //部门名称private LocalDateTime createTime; //创建时间private LocalDateTime updateTime; //修改时间
}

在controller层  给需要校验的参数加上 @ Validated

  @PostMapping("/depts")public Result addDept( @RequestBody @Validated Dept dept){//这里应该判断是否返回成功deptService.addDept(dept);return Result.success();}

此时如果再进行传入参数,如果name为null 就会报错。

三、额外补充

在前面我们谈到了校验的基本用法,但在开发中,我需要对这些异常进行统一处理,并返回符合相应规则的返回值。

因此,需要用到全局异常处理。

让gpt解答一下:

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<ErrorResponse> handleValidationException(MethodArgumentNotValidException ex) {BindingResult bindingResult = ex.getBindingResult();List<String> errors = bindingResult.getFieldErrors().stream().map(FieldError::getDefaultMessage).collect(Collectors.toList());ErrorResponse response = new ErrorResponse("Validation Failed", errors);return ResponseEntity.badRequest().body(response);}}

bindingResult.getAllErrors(); getFieldErrors() 有什么区别?

@RestController
@RequestMapping("/users")
public class UserController {@PostMappingpublic ResponseEntity<String> createUser(@Validated @RequestBody User user, BindingResult result) {if (result.hasErrors()) {// 获取字段错误列表List<FieldError> fieldErrors = result.getFieldErrors();// 遍历字段错误列表,输出错误信息for (FieldError error : fieldErrors) {String fieldName = error.getField();String errorMessage = error.getDefaultMessage();System.out.println("字段名:" + fieldName + ",错误信息:" + errorMessage);}return ResponseEntity.badRequest().body("参数校验失败");}// 校验通过,处理创建用户的逻辑return ResponseEntity.ok("用户创建成功");}}

四、对于注入的属性值也可以进行参数校验

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

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

相关文章

Java - 线程间的通信方式

线程通信的方式 线程中通信是指多个线程之间通过某种机制进行协调和交互 线程通信主要可以分为三种方式&#xff0c;分别为共享内存、消息传递和管道流。每种方式有不同的方法来实现 共享内存&#xff1a;线程之间共享程序的公共状态&#xff0c;线程之间通过读-写内存中的公…

【ARM Coresight 系列 2 文章 -- Trace32 对 APBIC 地址的配置 介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 APBIC RomtableTrace32 RESBREAKTrace32 ENRESETAPBIC Romtable 图 1 APBIC 网络图 如上图所示,如果想通过Trace32/DS-5 去访问 AP, 这个时候需要怎么做呢?可以看到 APBIC 中ROMTABLE 中 APB-AP 的偏移是0x002000…

ECCV 2024 European Conference on Computer Vision

目录 DatesPeople 官网&#xff1a; https://eccv2024.ecva.net/ 链接 Dates Thursday, February 29, 2024 authors Abstract registration deadlineThursday, March 7, 2024 authors Submission deadlineThursday, March 14, 2024 authors Supplementary materials deadlineM…

数据驱动构建企业动态全面预算管理架构

在过去的20年里&#xff0c;电子表格一直是企业用于规划、预测、预算和管理报告的主要工具&#xff0c;尽管有的企业具备针对财务的系统&#xff0c;但其应用效率和规划技术仍然难以满足市场需求。并且&#xff0c;大部分企业对于财务管理的部署成本相对较低&#xff0c;其可访…

御剑工具学习

御剑 1.1 工具的下载路径1.2 工具的安装流程1.3 工具的详细使用 1.1 工具的下载路径 百度网盘 链接&#xff1a;https://pan.baidu.com/s/1Bn7GtWb7AStcjzVahFOjSQ 提取码&#xff1a;zkaq 1.2 工具的安装流程 御剑不用安装&#xff0c;直接下载下来解压&#xff0c;双击“御…

优化您的Mac电脑风扇控制体验 - 尝试Macs Fan Control Pro!

在日常使用Mac电脑过程中&#xff0c;我们经常会遇到电脑发热的问题&#xff0c;特别是在运行大型软件或进行高负载任务时。为了保护电脑硬件&#xff0c;一个高效且可靠的风扇控制软件是必不可少的。 Macs Fan Control Pro是一款专为Mac电脑设计的风扇控制软件&#xff0c;它…

SpringBoot自定义参数校验注解

为什么要自定义校验注解? 当现有的注解NotEmptyPatternNotNullURl等不能满足业务需求的时候,我们需要手动自定义一个注解 操作步骤 新建一个anno的包 单击右键添加注解 编写state注解 创建validation文件夹 编写校验规则 然后给上面的State注解指定这个校验规则 使用注解…

好用的网页内容转markdown工具

因为平时记录的笔记在不同的平台发布&#xff0c;后面需要保存成mrakdown的格式又找不到本地的文件记录&#xff0c;本地存储的好处很多&#xff0c;比如可以离线浏览阅读&#xff0c;对网页进行备份&#xff0c;也能借助其他工具同步数据而来满足自己的工作流程。这是这些工具…

【EI会议征稿】第三届电气、控制与信息技术国际学术会议(ECITech 2024)

第三届电气、控制与信息技术国际学术会议&#xff08;ECITech 2024&#xff09; 2024 3rd International Conference on Electrical, Control and Information Technology 继往届ECITech年度系列会议的成功举办&#xff0c;第三届电气、控制与信息技术国际学术会议&#xff08…

Vue-第七天

智慧商城项目&#xff1a; 1.创建项目选项&#xff1a; 2.调整&#xff1a; 主要是增加两个文件夹&#xff0c;删除倒是没什么 3.组件库&#xff08;vant-ui&#xff09;&#xff1a; 点击进入官网:Vant 2 - Mobile UI Components built on Vue 4.导入&#xff1a; 全部导入…

GaussDB数据库语法及gsql入门

一、GaussDB数据库语法入门 之前我们讲了如何连接数据库实例&#xff0c;那连接数据库后如何使用数据库呢&#xff1f;那么我们今天就带大家了解一下GaussDB&#xff0c;以下简称GaussDB的基本语法。 关于如何连接数据库&#xff0c;请戳这里。 学习本节课程之后&#xff0c…

宝塔面板部署Apache服务器搭建本地站点发布到公网可访问【内网穿透】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…