通过Validator接口实现参数校验

一、自定义类实现Validator接口

重写supports和validate这两个方法,在supports中写你要需校验的参数,在validate中定义你需要校验的规则

public class WarehouseAreaValidator implements Validator {@Overridepublic boolean supports(Class<?> clazz) {return WareHouseAreaReqDTO.class.equals(clazz);}@Overridepublic void validate(Object target, Errors errors) {WareHouseAreaReqDTO warehouseAreaReqDTO = (WareHouseAreaReqDTO) target;if (Objects.isNull(warehouseAreaReqDTO.getUniqueId())) {errors.reject(String.valueOf(ExceptionEnum.AuthException06.getCode()), "唯一标识不能为空");}if (Objects.isNull(warehouseAreaReqDTO.getLngAndLat())) {errors.reject(String.valueOf(ExceptionEnum.AuthException06.getCode()), "库区点位值不能为空");} else if (Objects.equals(warehouseAreaReqDTO.getGeoType(), "POINT")) {if (!ValidateUtil.validateWktPoint(warehouseAreaReqDTO.getLngAndLat())) {errors.reject(String.valueOf(ExceptionEnum.AuthException06.getCode()), "库区点位值格式不正确");}} else if (Objects.equals(warehouseAreaReqDTO.getGeoType(), "POLYGON")) {if (!ValidateUtil.validateWktPolygon(warehouseAreaReqDTO.getLngAndLat())) {errors.reject(String.valueOf(ExceptionEnum.AuthException06.getCode()), "库区点位值格式不正确");}} else {errors.reject(String.valueOf(ExceptionEnum.AuthException06.getCode()), "请正确输入点位类型和值");}}
}

二、在controller中实现校验Dto

毕竟应用场景不一样,并且也不止这一种方法,大家自行参考

        //校验参数List<String> errorMessageList = new ArrayList<>();for (WareHouseAreaReqDTO wareHouseAreaReqDTO : wareHouseAreaReqDTOList) {ValidateUtil.validate(errorMessageList,wareHouseAreaReqDTO,new WarehouseAreaValidator());}if (!CollectionUtils.isEmpty(errorMessageList)) {String errorMessage = StringUtils.join(errorMessageList,",");return Response.failure(errorMessage);}

Validate工具类

/*** 校验参数* @param errrorMessageList 错误信息* @param object 校验对象* @param validator 自定义validator实现类* @return 错误信息*/public static List<String> validate(List<String> errrorMessageList, Object object, Validator validator) {DataBinder binder = new DataBinder(object);binder.setValidator(validator);binder.validate();BindingResult result = binder.getBindingResult();if (result.hasErrors()) {for (ObjectError allError : result.getAllErrors()) {errrorMessageList.add(allError.getDefaultMessage());}}return errrorMessageList;}

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

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

相关文章

贪吃蛇游戏的编程之旅:在Windows PyCharm中使用Python

在电脑游戏的发展史中,贪吃蛇游戏无疑是其中的经典之作。许多人对其简单而上瘾的游戏玩法念念不忘。对编程爱好者来说,重新编写一个贪吃蛇游戏不仅是对青春回忆的一种致敬,也是一个极佳的学习机会。本文将引导你在Windows系统的PyCharm环境下,使用Python和pygame库来实现这…

jackson 若干问

jackson 若干问 https://www.jianshu.com/p/7a4653704acb https://cloud.tencent.com/developer/article/2394800 https://developer.aliyun.com/article/1001646 https://stackoverflow.com/questions/24280605/how-to-create-json-array-using-jackson https://www.bael…

Unity内制作动画

Unity内制作动画 动画剪辑&#xff08;Animation Clips&#xff09; 创建动画剪辑&#xff1a;在Unity中&#xff0c;可以通过导入动画数据来创建动画剪辑。这些数据可以是FBX、OBJ等格式的3D模型文件&#xff0c;其中包含关键帧动画。 编辑动画剪辑&#xff1a;在Unity的Anim…

最新一站式AI创作中文系统网站源码+系统部署+支持GPT对话、Midjourney绘画、Suno音乐、GPT-4o文档分析等大模型

一、系统简介 本文将介绍最新的一站式AI创作中文系统&#xff08;集成ChatGPTMidjourneySunoStable Diffusion&#xff09;——星河易创AI系统&#xff0c;该系统基于ChatGPT的核心技术&#xff0c;融合了自然语言问答、绘画、音乐、文档分享、图片识别等创作功能&#xff0c;…

牛客热题:数组中出现一次的两个数字

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;数组中出现一次的两个数字题目链…

开发Windows应用程序的多种工具和语言

在软件开发领域&#xff0c;Windows应用程序的开发是一个广泛而多样化的领域。开发者可以利用各种工具和编程语言来创建功能丰富、用户友好的应用程序。以下是一些常见的开发环境和编程语言&#xff0c;它们被广泛用于开发Windows应用程序。 Visual Studio&#xff1a;微软的集…

集成学习算法笔记

一、引言 在机器学习和数据分析领域&#xff0c;集成学习算法因其能够显著提高模型预测性能而备受关注。然而&#xff0c;任何算法在应用过程中都不可避免地会遇到一些挑战和问题&#xff0c;集成学习算法也不例外。其中&#xff0c;最为常见且关键的两大问题便是欠拟合&#…

全国水系数据(更新到2024年5月)

上海市水系数据地图可视化 水系数据线图层&#xff08;小河/溪流、江/河、运河、下水道/排水管&#xff09; 水系数据面数据&#xff08;水域、水库、河岸、湿地&#xff09; 水系数据字段说明 可视化预览 北京市水系可视化 上海市水系可视化 广州市水系可视化 深圳市水系可视化…

考研数学考到110+分,到底有多难?

很难&#xff01; 大家平时在网上上看到很多人说自己考了130&#xff0c;其实这些人只占参加考研数学人数的极少部分&#xff0c;有个数据可以展示出来考研数学到底有多难&#xff1a; 在几百万考研大军中&#xff0c;能考到120分以上的考生只有2%。绝大多数人的分数集中在30…

Django 注册应用

上一章Django 创建项目及应用-CSDN博客 创建的应用&#xff0c;需要在主项目的myshop.settings.py 文件下注册 INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.sta…

[DDR5 Jedec 4-1] 预充电命令 Precharge

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 1. 预充电&#xff08;Precharge&#xff09;含义 由于SDRAM的寻址具体独占性&#xff0c;因此在进行完读写操作后&#xff0c;若需对同一L-Bank的另一行进行寻址&#xff0c;则必须先关闭原…

关于SQL中json类型字段优化查询

场景 写sql时&#xff0c;会出现大量的left join的情况&#xff0c;针对这种方式提供 两种解决方案。 解决方案 方案一 宽表&#xff0c;但是其维护性差 方案二 JSON类型字段 将业务查询的一些实体类 直接以JSON的形式存到数据库&#xff0c;以下是SQL代码查询的实例 dat…

vue3 源码下载地址

想要了解vue3底层的代码逻辑&#xff0c;就需要看其代码&#xff0c;为了技术的进步&#xff0c;冲啊。 源码下载地址&#xff1a; git clone https://github.com/vuejs/core.git 雄鹰每次折断翅膀&#xff0c;是为了飞的更高更远。技术提升起来&#xff0c;飞的更远更高。

Linux虚拟机设置定时任务(crontab)

Linux虚拟机设置定时任务(crontab) 在Linux中&#xff08;使用Cron&#xff09;&#xff1a; crontab 详解: crontab 是一个用于在 Unix 和类 Unix 操作系统上运行定期任务的工具。它允许用户根据特定的时间表执行命令或脚本&#xff0c;而无需手动执行它们。 使用 crontab…

0开篇-介绍

创作灵感 最近又开始写Python&#xff0c;换新机器了&#xff0c;加上回顾硬盘上的一些资料&#xff0c;发现当时用在态势上的一些机器学习内容一直没有收尾&#xff0c;2019年10月研发中心成立中断了机器学习产品的研发&#xff0c;加上后来疫情&#xff0c;这几年荒废了。有…

如何创建一个线程池,为什么不推荐使用Executors去创建呢?

我们在学线程的时候了解了几种创建线程的方式&#xff0c;比如继承Thread类&#xff0c;实现Runnable接口、Callable接口等&#xff0c;那对于线程池的使用&#xff0c;也需要去创建它&#xff0c;在这里我们提供2种构造线程池的方法&#xff1a; 方法一&#xff1a; 通过Thre…

【vue】vue2项目将npm包管理器修改为yarn包管理器

【vue】vue2项目将npm包管理器修改为yarn包管理器 1.删除node_modules文件夹、package-lock.json文件 2.全局安装yarn npm install -g yarn3.安装项目依赖 yarn install如果执行yarn install 报类似以下这种版本不兼容错误&#xff0c;执行 yarn config set ignore-engines …

MySQL之数据库数据库范式学习笔记(二)

三大范式 范式是数据库设计中的概念&#xff0c;用于规范化数据结构&#xff0c;以减少数据冗余并确保数据的一致性和完整性。MySQL 数据库设计通常遵循一定的范式&#xff0c;其中最常见的是第一至第三范式。以下是各个范式的简要说明&#xff1a; 第一范式&#xff08;1NF&…

【Qt】探索Qt绘图世界:自定义控件与视觉效果的全面指南

文章目录 前言&#xff1a;1. 绘图基本概念2. 绘制各种形状3. 绘制文字&#xff08;显示文字&#xff09;、设置画笔4. 画刷5. 绘制图片6. 特殊的绘图设备总结&#xff1a; 前言&#xff1a; 在软件开发中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的设计是至关重要…

Unity中帧动画素材的切割设置

有几个问题&#xff0c;美术在给我们帧动画的时候&#xff0c;一般都是给一个比较大的图&#xff0c;然后进行切割成多个sprite&#xff0c;导入到animation中 一般来说&#xff0c;进行那个autoSlide&#xff0c;自动切割就可以了 这个自动切割的图片会沿着有像素的最小包围…