Springboot实现参数校验

devtools/2025/2/19 8:51:30/

Springboot实现参数校验

导入依赖

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

实体类中加上相应注解

java">
public class User {// 用户名@NotBlank(message = "用户名不能为空") // 注解确保用户名不为空private String username;// 性别@NotNull(message = "性别不能为空") // 注解确保性别不为空private Integer sex;// 年龄@NotNull(message = "年龄不能为空")@Min(value = 18, message = "年龄必须大于或等于 18")  // 注解确保年龄大于等于 18@Max(value = 100, message = "年龄必须小于或等于 100")  // 注解确保年龄小于等于 100private Integer age;// 邮箱@NotBlank(message = "邮箱不能为空")@Email(message = "邮箱格式不正确")  // 注解确保邮箱格式正确private String email;
}

Controller 参数校验

针对每个字段的校验注解添加完成后,还需要在 controller 层进行捕获(@Validated),并将错误信息返回。编辑 TestController 类,代码如下:

java">@RestController
@Slf4j
public class TestController {@PostMapping("/test")@ApiOperationLog(description = "测试接口")public ResponseEntity<String> test(@RequestBody @Validated User user, BindingResult bindingResult) {// 是否存在校验错误if (bindingResult.hasErrors()) {// 获取校验不通过字段的提示信息String errorMsg = bindingResult.getFieldErrors().stream().map(FieldError::getDefaultMessage).collect(Collectors.joining(", "));return ResponseEntity.badRequest().body(errorMsg);}// 返参return ResponseEntity.ok("参数没有任何问题");}}

全局异常处理器捕获该异常完成最佳实践

java">    /*** 捕获参数校验异常* @return*/@ExceptionHandler({ MethodArgumentNotValidException.class })@ResponseBodypublic Response<Object> handleMethodArgumentNotValidException(HttpServletRequest request, MethodArgumentNotValidException e) {// 参数错误异常码String errorCode = ResponseCodeEnum.PARAM_NOT_VALID.getErrorCode();// 获取 BindingResultBindingResult bindingResult = e.getBindingResult();StringBuilder sb = new StringBuilder();// 获取校验不通过的字段,并组合错误信息,格式为: email 邮箱格式不正确, 当前值: '123124qq.com';Optional.ofNullable(bindingResult.getFieldErrors()).ifPresent(errors -> {errors.forEach(error ->sb.append(error.getField()).append(" ").append(error.getDefaultMessage()).append(", 当前值: '").append(error.getRejectedValue()).append("'; "));});// 错误信息String errorMessage = sb.toString();log.warn("{} request error, errorCode: {}, errorMessage: {}", request.getRequestURI(), errorCode, errorMessage);return Response.fail(errorCode, errorMessage);}

状态码

java"> PARAM_NOT_VALID("10001", "参数错误"),

检验不通过的异常会自动捕获并返回给前端


http://www.ppmy.cn/devtools/125232.html

相关文章

数据在内存中的存储【下】

三.浮点数在内存中的存储 我们常见的浮点数&#xff1a;3.14159&#xff0c;1E10等&#xff0c;浮点数家族包括&#xff1a;float&#xff0c;double, long double类型。浮点数表示的范围&#xff1a;float.h中定义。之前我们说过浮点数在内存中无法精确保存&#xff0c;那为什…

优达学城 Generative AI 课程3:Computer Vision and Generative AI

文章目录 1 官方课程内容自述第 1 课&#xff1a;图像生成简介第 2 课&#xff1a;计算机视觉基础第 3 课&#xff1a;图像生成与生成对抗网络&#xff08;GANs&#xff09;第 4 课&#xff1a;基于 Transformer 的计算机视觉模型第 5 课&#xff1a;扩散模型第 6 课&#xff0…

树莓派应用--AI项目实战篇来啦-3.OpenCV 读取写入和显示图像

1. 介绍 在计算机视觉和图像处理领域&#xff0c;读取和显示图像是最基础且常见的操作之一&#xff0c;OpenCV作为一个强大的计算机视觉库&#xff0c;提供了丰富的功能来处理图像数据。 读取、显示和写入图像是图像处理和计算机视觉的基础&#xff0c;即使裁剪、调整大…

Vue vben admin开源库中table组件tips

table如何自定义表头和自定义内容 自定义表头直接使用tittle&#xff0c;自定义内容是customRender {title: (<span><img src{alvchat_avatar} style"width:20px;height:20px;vertical-align:bottom"></img>{t(routes.alerts.columnsAIReview)}<…

计算机毕业设计 基于Hadoop的租房数据分析系统的设计与实现 Python毕业设计 Python毕业设计选题 数据分析【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

vue3.2实现AES加密解密,秘钥通过API获取,并混淆秘钥,后端thinkphp

aes.ts文件 import CryptoJS from "crypto-js"; import axios from "axios";export const encrypt async(data: any) > {let storeKey sessionStorage.getItem(a)let storeIv:any sessionStorage.getItem(i)// 如果秘钥或 IV 不存在&#xff0c;尝试…

Java->排序

目录 一、排序 1.概念 2.常见的排序算法 二、常见排序算法的实现 1.插入排序 1.1直接插入排序 1.2希尔排序(缩小增量法) 1.3直接插入排序和希尔排序的耗时比较 2.选择排序 2.1直接选择排序 2.2堆排序 2.3直接选择排序与堆排序的耗时比较 3.交换排序 3.1冒泡排序…

从零开始搭建一个node.js后端服务项目

目录 一、下载node.js及配置环境 二、搭建node.js项目及安装express框架 三、集成nodemon&#xff0c;实现代码热部署 四、Express 应用程序生成器 一、下载node.js及配置环境 网上很多安装教程&#xff0c;此处就不再赘述了 版本信息 C:\Users\XXX>node -v v20.15.0…