在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.mzph.cn/news/205949.shtml

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

相关文章

2023五岳杯量子计算挑战赛数学建模思路+代码+模型+论文

目录 计算力网络&#xff08;CPN&#xff09;是一种新型的信息基础设施&#xff0c;完整论文代码见文末 问题描述 2.1 问题1 2.2 问题2 2.3 问题3 问题1的解答过程&#xff1a; 问题3的解答过程&#xff1a; 决策优化应用场景&#xff1a;人工智能模型超参数调优 背景信…

最新V2Board 面板搭建教程(一)

1、购买服务器 2、解析域名并放行端口&#xff0c;Cloudflare官网&#xff1a;【点击进入】 更多的防火墙设置可查看此文章&#xff1a;【点击进入】 firewall-cmd --zonepublic --add-port端口号/tcp --permanent 顺哥博客 3、安装宝塔面板国际版&#xff0c;官网地址&am…

ELK(四)—els基本操作

目录 elasticsearch基本概念RESTful API创建非结构化索引&#xff08;增&#xff09;创建空索引&#xff08;删&#xff09;删除索引&#xff08;改&#xff09;插入数据&#xff08;改&#xff09;数据更新&#xff08;查&#xff09;搜索数据&#xff08;id&#xff09;&…

Kafka性能调优:高吞吐、低延迟的数据流

Apache Kafka作为一种高性能、分布式流处理平台&#xff0c;对于实时数据的处理至关重要。本文将深入讨论Kafka性能调优的关键策略和技术&#xff0c;通过丰富的示例代码为大家提供实际操作指南&#xff0c;以构建高吞吐、低延迟的数据流系统。 Broker 配置的优化 首先&#…

Cisco Packet Tracer配置命令——交换机篇

交换机VLAN配置 在简单的网络环境中&#xff0c;当交换机配置完端口后&#xff0c;即可直接应用&#xff0c;但若在复杂或规模较大的网络环境中&#xff0c;一般还要进行VLAN的规划&#xff0c;因此在交换机上还需进行 VLAN 的配置。交换机的VLAN配置工作主要有VLAN的建立与删…

【银行测试】第三方支付平台业务流,功能/性能/安全测试方法...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、第三方支付平台…

dorker使用一

1.1&#xff0c;先卸载老的 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine1.2 ,安装准备 安装所需的软件包。yum-utils 提供了 yum-config-manager &#xff0c;并且 devic…

DSP外部中断笔记

中断原理 三部分 注意 &#xff0c;外部中断使能&#xff0c;PIE使能&#xff0c;CPU中断使能 外部中断有7个&#xff0c;PIE有12组&#xff0c;一个组有8个中断复用。只有一个CPU中断可执行。 外部中断原理 1、外部中断概述 外部中断结构图 外部中断XINT1对应的是0到31GPI…

在vue中深度选择器的使用

一、为什么要使用深度选择器 在vue中&#xff0c;当我们使用了第三方库中的组件时&#xff0c;想要更改一些样式&#xff0c;达到我们想要的效果&#xff0c;由于scoped的影响直接编写同名样式时&#xff0c;是覆盖不了组件内的样式的。 为了达到我们想要的效果&#xff0c;…

区块链实验室(28) - 拜占庭节点劫持区块链仿真

在以前的FISCO环境中仿真拜占庭节点攻击区块链网络。该环境共有100个节点&#xff0c;采用PBFT作为共识机制&#xff0c;节点编号分别为&#xff1a;Node0&#xff0c;Node&#xff0c;… &#xff0c;Node99。这100个节点的前2010区块完全相同&#xff0c;自区块2011开始分叉。…

Pytest+Allure生成自动化测试报告!

前言 在自动化测试中&#xff0c;有unittestHTMLTestRunner自动化测试报告&#xff0c;但是生成的测试报告不够美观详细&#xff0c;今天我们来学习一下PytestAllure生成自动化测试报告。 一&#xff1a;安装python中的allure依赖库 在dos窗口中&#xff0c;输入下面三个命令…

如何将idea中导入的文件夹中的项目识别为maven项目

问题描述 大家经常遇到导入某个文件夹的时候&#xff0c;需要将某个子文件夹识别为maven项目 解决方案

计算整数各位数字之和 C语言xdoj29

时间限制: 1 S 内存限制: 1000 Kb 问题描述: 假设n是一个由最多9位数字&#xff08;d9, …, d1&#xff09;组成的正整数。编写一个程序计算n的每一位数字之和 输入说明: 输入数据为一个正整数n 输出说明: 对整数n输出它的各位数字之和后换行 输入样例: …

金融行业文件摆渡,如何兼顾安全和效率?

金融行业是数据密集型产业&#xff0c;每时每刻都会产生海量的数据&#xff0c;业务开展时&#xff0c;数据在金融机构内部和内外部快速流转&#xff0c;进入生产的各个环节。 为了保障基础的数据安全和网络安全&#xff0c;金融机构采用网络隔离的方式来隔绝外部网络的有害攻击…

【动手学深度学习】(十)PyTorch 神经网络基础+GPU

文章目录 一、层和块1.自定义块2.顺序块3.在前向传播函数中执行代码 二、参数管理1.参数访问2.参数初始化3.参数绑定 三、自定义层1.不带参数的层2.带参数的层 四、读写文件1.加载和保存张量2.加载和保存模型参数五、使用GPU [相关总结]state_dict() 一、层和块 为了实现复杂神…

【EXCEL】offset函数

语法&#xff1a; offset(reference,row,column,[height],[width]) 例子&#xff1a;

【沐风老师】3dMax椅子建模教程

3dMax椅子建模详解 1.将系统单位设置为&#xff1a;毫米。在前视图创建一个矩形&#xff0c;并将四个角倒圆角。 2.开启二维图形可渲染功能&#xff0c;设置线条粗细。参数如图&#xff1a; 3.应用“FFD 2x2x2”修改器&#xff0c;在前视图中&#xff0c;选中右下角所有控制点&…

77. 组合

组合 描述 : 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 题目 : LeetCode 77. 组合 : 77. 组合 分析 : 请看回溯怎么回事 , 里面讲的很清晰 . 解析 ; class Solution {public List<List<Integ…

vue 轮播图原生

以下是一个基本的 Vue 轮播图实现&#xff1a; 在 Vue 组件中声明一个数组&#xff0c;用于存放图片路径和标题等信息&#xff1a; data() {return {images: [{src: https://picsum.photos/800/300?image0,title: Image 1},{src: https://picsum.photos/800/300?image1,tit…

揭开WPF里面XAML可以通过http引入命名空间的神秘面纱

前言 做WPF开发这么久,其实一直对头部引入命名空间有些疑问,为啥官方提供的库通过xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"引入,而我自己开发的就只能通过 xmlns:local="clr-namespace:Darren.Wpf.MainModule.Views"来引入…