SpringBoot使用HibernateValidation

embedded/2025/3/20 3:25:51/

概述

Bean Validation源于JSR-303 ,而JSR303是 Java EE 6 中的一项子规范。JSR349、JSR380是其升级版,添加了一些新的特性。Oracle公司传统艺能,一流公司定标准,它们只定义了一些校验注解(Constraint),如@Null@NotNull@Pattern],位于javax.validation.constraints包下,只提供规范不提供实现。Hibernate Validator是对这个规范的实现(不要和数据库ORM框架Hibernate联系在一起),并增加了一些自定义校验注解,如@Email、@Length、@Range,位于org.hibernate.validator.constraints包下。这里贴上常用的注解和解释
在这里插入图片描述

引入依赖

		<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>6.0.1.Final</version></dependency>

新增配置类

  • HibernateValidationConfig.java
java">package com.example.learn.config;import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;@Configuration
public class HibernateValidationConfig {@Beanpublic MethodValidationPostProcessor methodValidationPostProcessor() {/**默认是普通模式,会返回所有的验证不通过信息集合*/MethodValidationPostProcessor processor = new MethodValidationPostProcessor();/**设置validator模式为快速失败返回*/processor.setValidator(validator());return processor;}@Beanpublic Validator validator() {ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory();Validator validator = validatorFactory.getValidator();return validator;}}

用法与测试

  • ValidateTestController.java
java">package com.example.learn.controller;import com.example.learn.common.returns.CommonResult;
import com.example.learn.pojo.dto.UserDTO;
import org.hibernate.validator.constraints.Length;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;import javax.validation.constraints.Min;@RestController
@RequestMapping(value = "/validate/test")
@Validated
public class ValidateTestController {@PostMapping(value = "/save")public CommonResult saveUser(@RequestBody @Validated UserDTO userDTO) {System.out.println(userDTO.toString());return CommonResult.success();}@GetMapping(value = "/{userId}")public CommonResult detail(@PathVariable("userId") @Min(value = 200L,message = "userId须大于200") Long userId) {return CommonResult.success();}@GetMapping(value = "/getByAccount")public CommonResult getUser(@RequestParam(value = "account") @Length(min = 6, max = 20, message = "account的长度须介于6和20之间") String account) {return CommonResult.success();}
}
java">package com.example.learn.pojo.dto;import lombok.Data;
import org.hibernate.validator.constraints.Length;import javax.validation.constraints.NotNull;
import java.math.BigDecimal;@Data
public class UserDTO {private Long userId;@NotNull(message = "用户名不能为空")@Length(min = 2, max = 10, message = "用户名称需要在2和10之间")private String userName;@NotNull(message = "账户不能为空")@Length(min = 6, max = 20, message = "账户长度需要在6和20之间")private String account;@NotNull(message = "密码不能为空")@Length(min = 7,max = 20, message = "密码长度需要在7和20之间")private String password;@NotNull(message = "金额不能为空")private BigDecimal money;
}

参考

RuoYi-Vue-v3.8.9
【SpringBoot】使用hibernate-validator实现优雅的参数校验


http://www.ppmy.cn/embedded/174030.html

相关文章

vue 仿deepseek前端开发一个对话界面

后端&#xff1a;调用deepseek的api&#xff0c;所以返回数据格式和deepseek相同 {"model": "DeepSeek-R1-Distill-Qwen-1.5B", "choices": [{"index": 0, "delta": {"role": "assistant", "cont…

Blender4.3雕刻笔刷简介

Blender4.3雕刻笔刷简介 添加/减去笔刷(Add/Subtract Brushes)对比度笔刷(Contrast Brushes) 添加/减去笔刷(Add/Subtract Brushes) 名称英文名称快捷键描述官方文档描述示意图球形笔刷Blob画一个圆圆突起的球绘制时放大网格。有助于在笔触上实现额外的膨胀效果。黏塑Clay更加…

MySQL启动报错/var/lib/mysql‘ for UNIX socket file don‘t exists.

错误呈现 解决办法 启动MySQL服务时&#xff0c;会优先在/etc/目录下查找my.cnf&#xff0c;所以把这个文件重命名或删除重启服务就好了。 我先查看下我的 /etc/my.cnf 文件 删除 my.cnf 文件 rm -rf my.cnf 启动MySQL service mysql start 这样就解决了 systemctl start my…

RPA 职业前景:个人职场发展的 “新机遇”

1. RPA职业定义与范畴 1.1 RPA核心概念 机器人流程自动化&#xff08;RPA&#xff09;是一种通过软件机器人模拟人类操作&#xff0c;自动执行重复性、规则性任务的技术。RPA的核心在于其能够高效、准确地处理大量数据和流程&#xff0c;减少人工干预&#xff0c;从而提高工作…

Arch Linux高性能数据处理优化指南

Arch Linux是一款高度自定义的发行版&#xff0c;为高性能数据处理任务提供了广阔的优化空间。通过从内核、文件系统、内存管理、CPU调度到网络、编译等多个层面进行系统性优化&#xff0c;可显著提升其在科学计算、实时分析等场景下的数据处理性能。以下是详细的优化策略&…

Centos离线安装gcc

文章目录 Centos离线安装gcc1. gcc是什么&#xff1f;2. gcc下载地址3. gcc的安装4. 安装结果验证 Centos离线安装gcc 1. gcc是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是 GNU 项目下的开源编译器套件&#xff0c;主要用于将 C、C 等编程语言的源…

备赛蓝桥杯-Python-Day1-基础语法回顾

一.Python中标识符的命名规则 1 区分大小写&#xff1a;Myname与myname是两个不同的标识符。 2 首字符可以是下画线&#xff08;_&#xff09;或字母&#xff0c;但不能是数字。 3 除首字符外的其他字符必须是下画线、字母和数字。 4 关键字不能作为标识符。 5 不要使用Py…

Docker安装mysql——Linux系统

拉取mysql镜像 docker pull mysql 查看镜像 docker images 运行镜像&#xff08;这一步的作用&#xff1a;数据持久化&#xff0c;通过挂载卷将日志、数据和配置文件存储在主机上&#xff0c;避免容器删除导致数据丢失&#xff09; docker run -p 3306:3306 --name mysql …