SpringBoot集成Validation参数校验的方法是什么
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇"SpringBoot集成Validation参数校验的方法是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有
千家信息网最后更新 2025年11月10日SpringBoot集成Validation参数校验的方法是什么
这篇"SpringBoot集成Validation参数校验的方法是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"SpringBoot集成Validation参数校验的方法是什么"文章吧。
1、依赖
SpringBoot在web启动器中已经包含validator包
org.springframework.boot spring-boot-starter-web
非SpringBoot项目,需要自定引入依赖
org.hibernate.validator hibernate-validator 6.1.5.Final org.glassfish jakarta.el 3.0.3
2、常用约束说明
package com.smile.project.validator.utils; public class 常用约束说明 { /** * @Null:元素为null * @NotNull:元素不为null * @AssertTrue:元素为true * @AssertFalse:元素为false * @Min(value):数字的值大于等于指定的最小值 * @Max(value):数字的值小于等于指定的最大值 * @DecimalMin(value):大数值大于等于指定的最小值 * @DecimalMax(value):大数值小于等于指定的最大值 * @Size(max=,min=):元素的大小在指定的范围内 * @Digits(integer,fraction):元素是一个数字,其值必须在可接受的范围内 * @Past:一个过去的日期 * @Future:一个将来的日期 * @Pattern(regex=,flag=):指定的正则表达式 * @URL:必须是一个URL * @Email:必须是email格式 * @NotBlank:字符串不能为空 * @NotEmpty:集合不能为空 * @Length:长度必须在指定范围内 * @Valid:对实体类进行校验 */ }3、实体约束示例
import com.smile.project.validator.utils.Gender;import lombok.Data;import javax.validation.constraints.Email;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size; @Datapublic class SysUser { private Long id; @NotNull(message = "用户名不能为空") @Size(min = 3,max = 5,message = "用户名长度为{min}-{max}之间") private String username; @NotNull(message = "昵称不能为空") private String name; @NotNull(message = "密码不能为空") private String password; @Email(message = "邮箱格式不合法") private String email; private String gender; }4、控制层示例
需要在class加上@Validated注解
如果参数时实体,需要加上@Valid注解
import com.smile.project.validator.entity.SysUser;import org.springframework.http.ResponseEntity;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;import javax.validation.constraints.NotNull; @RestController@Validatedpublic class SysUserController { /** * 方法参数为实体校验 */ @PostMapping("/register") public ResponseEntity register(@Valid SysUser sysUser){ return ResponseEntity.ok(sysUser); } /** * 方法参数校验 */ @GetMapping("user") public ResponseEntity getUser(@NotNull(message = "用户名不能为空") String username){ SysUser sysUser = new SysUser(); sysUser.setName("smile"); return ResponseEntity.ok(sysUser); } }5、异常捕获
全局异常捕获,当出现参数校验不合法时捕获异常,并且返回给前端
import org.springframework.http.ResponseEntity;import org.springframework.validation.FieldError;import org.springframework.validation.ObjectError;import org.springframework.web.bind.MethodArgumentNotValidException;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import javax.validation.ConstraintViolation;import javax.validation.ConstraintViolationException;import java.util.HashMap;import java.util.List;import java.util.Set; /** * 全局异常捕获 * 当出翔参数校验不合法时捕获异常,并且返回给前端 */@ControllerAdvicepublic class GlobHandler { /** * 捕获方法参数校验异常 */ @ExceptionHandler(ConstraintViolationException.class) @ResponseBody public ResponseEntity constraintViolationExceptionHandler(ConstraintViolationException e){ Set> message = e.getConstraintViolations(); HashMap map = new HashMap<>(); message.stream().forEach(msg ->{ String path = msg.getPropertyPath().toString(); String field = path.substring(path.indexOf(".")+1); map.put(field,msg.getMessageTemplate()); }); return ResponseEntity.ok(map); } /** * 捕获实体参数校验异常 */ @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody public ResponseEntity resolveMethodArgumentNotValidException(MethodArgumentNotValidException e){ List allErrors = e.getBindingResult().getAllErrors(); HashMap map = new HashMap<>(); allErrors.stream().forEach(error -> { FieldError fieldError = (FieldError) error; map.put(fieldError.getField(),fieldError.getDefaultMessage()); }); return ResponseEntity.ok(map); } } 6、自定义校验规则
特殊的字段需要自定义规则,比如身份证号码,邮箱,电话等
6.1、定义校验注解
import com.smile.project.validator.utils.GenderValidator;import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.*;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * 定义校验注解 */@Target({METHOD,FIELD})@Retention(RUNTIME)@Constraint(validatedBy = GenderValidator.class)@Documentedpublic @interface Gender { String message() default "性别为男或者女"; Class>[] groups() default {}; Class extends Payload[]>[] payload() default {}; }6.2、GenderValidator实现ConstraintValidator接口并提供校验规则
import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext; /** * 实现ConstraintValidator接口并提供校验规则 */public class GenderValidator implements ConstraintValidator{ //初始化校验值 @Override public void initialize(Gender constraintAnnotation) { } //检验规则 @Override public boolean isValid(String value, ConstraintValidatorContext content) { return "男".equals(value) || "女".equals(value); }}
6.3、在成员变量中使用注解
import com.smile.project.validator.utils.Gender;import lombok.Data;import javax.validation.constraints.Email;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size; @Datapublic class SysUser { private Long id; @NotNull(message = "用户名不能为空") @Size(min = 3,max = 5,message = "用户名长度为{min}-{max}之间") private String username; @NotNull(message = "昵称不能为空") private String name; @NotNull(message = "密码不能为空") private String password; @Email(message = "邮箱格式不合法") private String email; @Gender() private String gender; }7、分组校验
默认情况下,不指定分组都属于默认组;使用分组校验有利于分层校验开发
7.1、新建两个接口,一个用于查询,一个用于添加
public interface ADD extends Default { } public interface Select extends Default { }7.2、修改尸体校验规则,如果不指定分组默认时Default组;
import com.smile.project.validator.utils.Gender;import lombok.Data;import javax.validation.constraints.Email;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size; @Datapublic class SysUser { private Long id; @NotNull(message = "用户名不能为空",groups = ADD.class) @Size(min = 3,max = 5,message = "用户名长度为{min}-{max}之间") private String username; @NotNull(message = "昵称不能为空",groups = Select.class) private String name; @NotNull(message = "密码不能为空",groups = ADD.class) private String password; @Email(message = "邮箱格式不合法",groups = Select.class) private String email; @Gender() private String gender; }7.3、控制层示例,此时只会校验ADD组和Default组
//分组校验@PostMapping("/user")public ResponseEntity addUser(@Validated(value = ADD.class) @RequestBody SysUser sysUser){ return ResponseEntity.ok(sysUser);}以上就是关于"SpringBoot集成Validation参数校验的方法是什么"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
参数
用户
用户名
方法
元素
规则
内容
实体
注解
分组
格式
邮箱
长度
之间
密码
接口
数字
昵称
示例
范围
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中级软件开发证件
网络安全新设备课后答案
服务器ssh协议怎么关
数据库来源
数据库管理员的职责范围是什么
河南嘉诚网络技术有限公司
无法验证服务器身份 p35
杭州绩夕网络技术
服务器安全设置(六)
网络安全研讨交流
数据库数据表连接
免费的ftp服务器
软件开发岗位技术面试问题
群晖服务器是哪家公司的
数据库中表的连接有哪三种
街道广泛开展网络安全活动
远程数据库mysql
omim数据库下载不全怎么办
山西惠普服务器续保费用
付宝中国网络技术
z32hub芯片软件开发
tftp服务器如何开启
日志服务器和堡垒机的区别
新软软件开发公司
视频服务器作用
虚拟网络技术国际现状
公安局打击网络安全的讲话
数据库高危指令
苏州品牌网络技术哪家便宜
2020年网络安全事件处理