高端网站建设 上海,专业网站维护,wordpress comment_form,银行门户网站是什么意思⛰️个人主页: 蒾酒
#x1f525;系列专栏#xff1a;《spring boot实战》
#x1f30a;山高路远#xff0c;行路漫漫#xff0c;终有归途。 目录
前置条件
前言
导入依赖
使用介绍
配置检验规则
开启校验
使用注意
全局异常捕获返回友好提示信息
常用的校…
⛰️个人主页: 蒾酒
系列专栏《spring boot实战》
山高路远行路漫漫终有归途。 目录
前置条件
前言
导入依赖
使用介绍
配置检验规则
开启校验
使用注意
全局异常捕获返回友好提示信息
常用的校验规则注解
使用技巧 前置条件
已经初始化好一个spring boot项目且版本为3X项目可正常启动。
作者版本为3.2.2
初始化教程
新版idea(2023)创建spring boot3项目_2023年版的idea用maven创建springboot项目-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135785412?spm1001.2014.3001.5501
前言
在spring boot应用程序开发中对于参数校验这一块我们通常使用注解的方式来完成本文我们介绍关于spring boot注解化参数校验的初级使用。
导入依赖
pom.xml: dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency注意spring boot2.3以后默认spring-boot-starter-web组件不包含该依赖需要单独引入 使用介绍
配置检验规则
现在有一个用户登录请求对象
import jakarta.validation.constraints.*;
import lombok.Data;/*** author mijiupro*/
Data
public class UserLoginDTO {NotBlank(message 账号不能为空)private String userAccount;// 用户账号Size(min 6, max 18, message 用户密码长度需在6-18位)private String password;// 密码NotBlank(message 验证码id不能为空)private String captchaId;// 验证码idNotBlank(message 验证码内容不能为空)private String captcha;// 验证码内容
}
我们使用Size对字符串密码字段设置长度范围6-18位校验规则其他字段使用NotBlank设置非空校验。
注意事项
此时校验并不会生效因为我们只配置了规则并没有开启校验。 开启校验
通常我们在控制层进行参数校验通过对请求参数使用Validated注解或者Valid注解来启用校验。
RestController
RequestMapping(/user)
Tag(name 用户管理, description 用户管理)
public class UserController {private final UserService userService;public UserController(UserService userService) {this.userService userService;}PostMapping(/login)Operation(summary 用户登录)public UserLoginVO login(RequestBody Validated UserLoginDTO userLoginDTO) {return userService.login(userLoginDTO);}}
注意事项 在spring boot推荐用Validated注解因为它能够支持 Spring 提供的校验注解并且具有更好的集成性。 Validated和Valid区别 Validated注解是 Spring 框架提供的主要用于在 Spring MVC 中对控制器的方法参数进行校验。Valid注解是 Java 标准库提供的用于在任何地方触发参数校验包括 Spring MVC 的控制器方法、Spring Boot 的 REST 控制器方法、Spring Data JPA 的实体类等。 使用注意
控制器方法接收到请求参数后,会进行参数校验对于未通过校验规则的非法参数会抛出MethodArgumentNotValidException.class异常并打印出注解中传入的message提示信息参数
如图 可以看到参数未通过返回的信息很不友好我们需要通过全局异常捕获来处理一下返回友好的提示信息。
全局异常捕获返回友好提示信息
请确保配置了全局异常捕获
Spring Boot3自定义异常及全局异常捕获-CSDN博客https://blog.csdn.net/qq_62262918/article/details/136110267?spm1001.2014.3001.5501
我们只需要添加一个方法来捕获MethodArgumentNotValidException.class返回友好信息即可。 // 参数校验异常ExceptionHandler(MethodArgumentNotValidException.class)ResponseStatus(HttpStatus.BAD_REQUEST)public ResultString handleValidationExceptions(Exception ex) {log.error(ex.getMessage());// 从异常中获取字段错误信息FieldError fieldError ((MethodArgumentNotValidException) ex).getBindingResult().getFieldError();if (fieldError ! null) {// 获取错误提示信息String errorMessage fieldError.getDefaultMessage();log.error(errorMessage);return Result.error(errorMessage);} else {// 如果没有字段错误返回默认错误信息log.error(ex.getMessage());return Result.error(请求参数验证失败);}} 常用的校验规则注解 NotNull用于标记字段或方法参数不能为空。非nullNotEmpty用于标记集合、数组、字符串不能为空。非空集合、数组、字符串NotBlank用于标记字符串不能为空且长度必须大于0。非null且非空字符串Size用于标记集合、数组、字符串长度必须在指定范围内。Min用于标记数字类型的最小值。Max用于标记数字类型的最大值。Email用于标记字符串必须为邮箱格式。 使用技巧
NotNull用于一般的非空校验NotEmpty用于集合、数组、字符串的非空校验NotBlank则用于字符串的非空校验且长度必须大于0。 NotNull注解只要求不为null无法处理空字符空字符串在它这里是通过的。 NotBlank注解不仅要求不为null还会要求去除前后空格后长度大于0也就是它要求不能是空字符串。