SpringBoot注解--06--JSRValidatorUtil

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • Spring Validation数据校验
    • Spring Validation
    • Spring 提供的数据校验方式:
    • 依赖引入:
    • Spring Validation常用的注解
  • 手动校验:通过 "校验器+注解校验"
    • 1.需要校验的类User
    • 2.java原生校验器
        • 使用java原生的 jakarta.validation.Validator校验器
    • 3.spring提供的校验器
        • 使用spring提供的 org.springframework.validation.Validator校验器
  • JSRValidatorUtil
    • 应用


Spring Validation数据校验

Spring Validation

Spring Validation是SpringFramework提供的一种轻量级的数据验证框架,用于Java对象进行校验。Spring Validation(Spring的数据验证组件)其实是一个抽象层,它为数据验证提供了统一的接口和基本的校验功能。Spring Validation默认使用了Hibernate Validator作为其具体的实现,但是也可以通过适配器与其他数据验证框架(如Apache Commons Validator)一起工作。

Spring Validation的主要功能包括:

1、提供了一套注解,用于对Java对象进行校验;

2、支持嵌套校验,用于对一个对象中的属性进行递归校验;

3、支持分组校验,用于根据不同的校验场景,使用不同的校验规则;

4、支持国际化,可以根据不同的语言环境,使用不同的校验提示消息。

5、支持自定义注解和校验器,满足各种复杂的校验需求。

Spring 提供的数据校验方式:

  1. 实现org.springframework.validation.Validator接口,调用接口实现类;
  2. 通过 注解 方式进行数据校验(按照Bean Validation方式);
  3. 基于 方法(函数) 实现数据校验;
  4. 自定义校验

依赖引入:

  • 如果springboot版本小于2.3.x,spring-boot-web-starter会自动引入hibernate-validator。
  • 如果spring-boot版本为2.3.x,则需要手动引入依赖
<dependency>  <groupId>org.hibernate</groupId>  <artifactId>hibernate-validator</artifactId>  <version>6.0.1.Final</version>  
</dependency>

Spring Validation常用的注解

@NotNull:检查是否为null,不能为null。

@NotBlank:检查字符串是否为null或空字符串。

@NotEmpty:检查字符串、集合或数组是否为null或空。

@Min:检查数字是否大于等于指定值。

@Max:检查数字是否小于等于指定值。

@DecimalMin:检查数字是否大于等于指定值。

@DecimalMax:检查数字是否小于等于指定值。

@Size:检查字符串、集合或数组的长度是否在指定范围内。

@Digits:检查数字是否符合指定的精度和小数位数。

@Past:检查日期是否在当前时间之前。

@Future:检查日期是否在当前时间之后。

@Pattern:检查字符串是否匹配指定的正则表达式。

@Email:检查是否为有效的电子邮件地址。

@Length:检查字符串的长度是否在指定范围内。

@Range:检查数字是否在指定范围内。

@Positive:检查数字是否为正数。

@PositiveOrZero:检查数字是否为非负数。

@Negative:检查数字是否为负数。

@NegativeOrZero:检查数字是否为非正数。

@AssertTrue:检查是否为true。

@AssertFalse:检查是否为false。

@NotNull(message = “{user.name.notnull}”):使用国际化消息提示。

@NotBlank(message = “{user.name.notblank}”):使用国际化消息提示。

@NotEmpty(message = “{user.name.notempty}”):使用国际化消息提示。

@Email(message = “{user.email.format}”):使用国际化消息提示。

@Valid:用于嵌套校验,可以对一个对象中的属性进行递归校验。

@ConvertGroup:用于分组校验,可以指定校验的分组,根据不同的分组执行不同的校验规则。

@GroupSequence:用于定义校验分组的顺序,指定不同分组的执行顺序。

手动校验:通过 “校验器+注解校验”

1.需要校验的类User

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;@Data
public class User {@NotEmpty  //不可为空private String name;@Min(0)   //最小值@Max(110) //最大值private int age;
}

2.java原生校验器

使用java原生的 jakarta.validation.Validator校验器
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Set;/*** 使用java原生的jakarta.validation.Validator校验* */
@Service
public class JavaService {@Autowired   //自动装配Validator对象private Validator validator;//校验方法public boolean validator(User user){//校验后的结果存放进Set集合Set<ConstraintViolation<User>> set = validator.validate(user);//若没有校验到错误,集合为空,返回true。return set.isEmpty();}
}

3.spring提供的校验器

使用spring提供的 org.springframework.validation.Validator校验器
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.validation.BindException;
import org.springframework.validation.Validator;/*** 使用spring提供的validate校验方法*/
@Service
public class SpringService {@Autowiredprivate Validator validator;public boolean validator2(User user){BindException bindException = new BindException(user,user.getName());validator.validate(user,bindException);            //调用校验方法进行校验System.out.println(bindException.getAllErrors());  //输出所有错误信息return bindException.hasErrors();                  //若没有异常,返回false}
}

JSRValidatorUtil


import com.tuzhanai.framework.error.BaseError;
import com.tuzhanai.framework.error.SystemError;
import com.tuzhanai.framework.exception.AppException;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.HibernateValidator;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;@Slf4j
public class JSRValidatorUtil {private final static Validator VALIDATOR = Validation.byProvider(HibernateValidator.class).configure().buildValidatorFactory().getValidator();public static <T> void validate(T param, Class<?>... groups) {Set<ConstraintViolation<T>> validate = VALIDATOR.validate(param, groups);validate.forEach(v -> {log.error("JSR校验异常,property:{},message:{}", v.getPropertyPath(), v.getMessage());throw new AppException(new BaseError() {@Overridepublic Integer getErrorCode() {return SystemError.PARSE_PARAMS_FAIL.getErrorCode();}@Overridepublic String getErrorMsg() {return v.getMessage();}});});}
}

应用


public String syncPreExport(SyncExportDTO syncExportDTO, HttpServletResponse response, HttpServletRequest request) throws Exception {GoodsMediaReportReqDTO dto = ObjectMapperUtil.convert(syncExportDTO.getDto(), GoodsMediaReportReqDTO.class);if (null == dto) {throw new AppException(SystemError.PARSE_PARAMS_FAIL);}try {JSRValidatorUtil.validate(dto);} catch (Exception e) {throw new IllegalArgumentException("请检查配置是否存在必填项为空!");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22180.shtml

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

相关文章

表 ,索引的 degree 检查, trim(degree) default INSTANCES

检查degree >1 的 select substr(owner,1,15) Owner , ltrim(degree) Degree, ltrim(instances) Instances, count(*) "Num Tables" , Parallel from dba_tables where ( trim(degree) > 1 ) and table_name not like ET$% group by owner, degree , ins…

电商平台接口|获取价格数据,做好竞品分析

京东获得JD商品详情 API返回值说明 item_get-获得JD商品详情 jd.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[it…

Springboot 在线学习交流平台-计算机毕业设计源码46186

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;在线学习交流平台当然也不能排除在外。在线学习交流平台是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法…

飞睿uwb定位tag防丢器,蓝牙智能防丢器原理,支持苹果IOS的本地防丢查找

在当今这个快节奏的社会&#xff0c;人们的注意力经常被各种琐事分散&#xff0c;丢三落四的情况时有发生。随着科技的发展&#xff0c;智能防丢器应运而生&#xff0c;成为帮助我们解决这一烦恼的助手。今天&#xff0c;我们就来深入探讨一款备受瞩目的智能防丢产品——飞睿UW…

CDH6.3.2安装文档

前置环境&#xff1a; 操作系统&#xff1a; CentOS Linux release 7.7 java JDK &#xff1a; 1.8.0_231 1、准备工作 准备以下安装包&#xff1a; Cloudera Manager: cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm cloudera-manager-daemons-6.3.1-1466458.el…

视频号小店是什么?没有货源可以去做吗?一篇详解!

大家好&#xff0c;我是电商小V 视频号小店近两年在创业者眼中可以说是一个可以去操作的项目&#xff0c;也是可以激起来很高的讨论度&#xff0c;但是很多小伙伴对视频号小店了解不是很深&#xff0c;今天咱们就来详细的说一下&#xff1a;视频号小店&#xff0c; 视频号小店就…

鸿蒙Ability Kit(程序框架服务)【ServiceExtensionAbility】

ServiceExtensionAbility 概述 [ServiceExtensionAbility]是SERVICE类型的ExtensionAbility组件&#xff0c;提供后台服务能力&#xff0c;其内部持有了一个[ServiceExtensionContext]&#xff0c;通过[ServiceExtensionContext]提供了丰富的接口供外部使用。 本文描述中称被…

EasyV开发人员的使用说明书

在可视化大屏项目时&#xff0c;开发人员通常需要承担以下任务&#xff1a; 技术实现&#xff1a;根据设计师提供的设计稿&#xff0c;利用前端技术&#xff08;如HTML、CSS、JavaScript等&#xff09;和后端技术&#xff08;根据具体项目需求&#xff0c;可能是Java、Python、…

【工具】windows下VMware17解锁mac安装选项(使用unlocker427)

目录 0.简介 1.环境 2.安装前后对比 3.详细安装过程 3.1 下载unlocker427 1&#xff09;下载地址 2&#xff09;下载unlocker427.zip 3&#xff09;解压之后是这样的 4&#xff09;复制iso中的两个文件到你本地的VMware的安装目录下 5&#xff09;复制windows下的所有…

计网期末复习指南(四):网络层(IP协议、IPv4、IPv6、CIDR、ARP、ICMP)

前言&#xff1a;本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点&#xff0c;从计算机网络体系结构出发到应用层&#xff0c;每一个协议层通过一篇文章进行总结&#xff0c;本系列正在持续更新中... 计网期末复习指南&#xff08;一&#xff09;&#xff1a;计算…

学生在课堂上可以用小风扇吗?五款学生可用迷你手持小风扇分享!

随着夏季的来临&#xff0c;高温酷暑成为了学生日常学习生活中的一大挑战。在闷热的教室里&#xff0c;人多风扇少&#xff0c;闷热的环境很容易就会让人学不下去。因此学生在课堂上最好是使用手持小风扇&#xff0c;但选择的手持小风扇噪音一定要小&#xff0c;不然很容易就会…

HarmonyOS(29)onMeasureSize和PlaceChildren (View的测量和布局)

onMeasureSize和PlaceChildren onMeasureSize和PlaceChildren 说明官方使用示例参考资料 onMeasureSize和PlaceChildren 说明 在Android开发中View的测量onMeasure和布局onLayout是自定义组件必备的两个方法&#xff0c;HarmonyOS对自定义布局也提供了两个方法&#xff1a; on…

面试题:谈谈你对 JS 内存泄漏与内存溢出的理解

面试题&#xff1a;谈谈你对 JS 内存泄漏与内存溢出的理解 内存泄漏&#xff08;Memory Leak&#xff09;指的是程序不需要使用的内存没有被正确释放&#xff0c;从而导致内存占用逐渐增加&#xff0c;最终可能会耗尽所有可用内存。 内存泄漏即不想用的内存没被释放 内存溢出&a…

【VSCode实战】转换大小写快捷键

今天在VSCode Insiders上编码&#xff0c;突然想将某常量转换为大写。按照virtual studio的习惯&#xff0c;我Ctrl Shift U没有效果&#xff0c;Ctrl U也没效果。网上搜了搜&#xff0c;原来VSCode Insiders没有这个默认功能。 而VSCode Insiders这么强大怎么可能没有大小…

ELK 使用 metricbeat监控数据

IP功能版本192.168.140.153elk-18.13.4192.168.140.153metricbeat8.13.4192.168.140.156elk-28.13.4192.168.140.156metricbeat8.13.4192.168.140.159logstash8.13.4192.168.140.159kibana8.13.4 一、安装ELK 参考文档&#xff1a; https://download.csdn.net/download/weix…

TG-5510CA温补晶振用于GPS应用

随着现代社会对精准定位和导航需求的不断增加&#xff0c;GPS&#xff08;全球定位系统&#xff09;已成为我们日常生活和各行各业中不可或缺的一部分。无论是在智能手机、汽车导航、无人机飞行控制&#xff0c;还是在精密的科学研究和军事应用中&#xff0c;GPS系统都扮演着至…

爬虫入门教程:爬虫概述

在数字化时代&#xff0c;数据已经成为我们生活和工作中不可或缺的一部分。而如何高效、准确地获取这些数据&#xff0c;成为了许多领域面临的共同问题。今天&#xff0c;我们就来一起探讨一下爬虫技术&#xff0c;这个能够自动从互联网上抓取信息的神奇工具。 一、什么是爬虫…

Android电量优化,让你的手机续航更持久

节能减排&#xff0c;从我做起。一款Android应用如果非常耗电&#xff0c;是一定会被主人嫌弃的。自从Android手机的主人用了你开发的app&#xff0c;一天下来&#xff0c;也没干啥事&#xff0c;电就没了。那么他就会想尽办法找出耗电量杀手&#xff0c;当他找出后&#xff0c…

Ambient Diffusion: Learning Clean Distributions from Corrupted Data

我们采用以下六个标准,用于对从损坏数据中学习的领域的研究进行分类: **学习范式:**该标准区分模型如何从数据中学习: 监督学习,如 Noise2Noise [39] 所示,涉及在损坏和干净图像对上训练模型。这种方法需要访问干净的数据,这可能并不总是可行的。无监督学习方法,如 Amb…

用户定制应用顺序

经常会有这样的个性化需求&#xff0c;用户希望可以在页面上按自己的偏好拖放移动应用图标&#xff0c;而且还能保存&#xff0c;下次访问该页面时应用图标就是按自己上次保存的顺序展示的。 拖放是一种常见的特性&#xff0c;即抓取对象后移动到另一个位置后放下。在 HTML5 中…