news 2026/4/17 1:55:13

手动调用spring的@Validated校验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手动调用spring的@Validated校验

我们一般使用spring的校验,是在dao类中定义好校验逻辑,例如@NotBlank(message="xxx不能为空"),spring的拦截器会在请求进入controller层之前进行校验:

@PostMapping("/list") public RequestResult<String> list(@RequestBody @Validated XXDto dto) { }

现在要求不通过前端请求时触发校验,要在代码里面手动调用dao类的校验逻辑,实现方式如下:

import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.*; /** * 实体校验工具 * <p>手动调用触发,可以不用通过Spring拦截器触发</p> * <p> * 基于 JSR-303 Bean Validation 规范实现的对象校验工具类,提供多种校验结果返回方式。 * 支持校验单个对象、List集合和数组对象。 * </p> * * <p>使用示例:</p> * <pre> * // 校验单个对象 * String error = ValidatorUtils.validateEntityResult(user); * * // 校验List集合 * String error = ValidatorUtils.validateEntityResult(userList); * * // 校验指定分组 * String error = ValidatorUtils.validateEntityResult(user, CreateGroup.class); * </pre> * * @author lang.zhou * @since 2025-02-27 15:34 * @see javax.validation.Validator */ public class ValidatorUtils { private static final Validator validator; // 第一种方式创建Validator static { // 普通模式(默认是这个模式) // 普通模式(会校验完所有的属性,然后返回所有的验证失败信息) validator = Validation.buildDefaultValidatorFactory().getValidator(); } /** * 校验对象,返回校验失败Result信息 * * @param object 对象 * @param groups 组 * @return 校验失败返回错误信息,成功返回成功信息 */ public static String validateEntityResult(Object object, Class<?>... groups) { Map<String, String> map = new HashMap<>(); // list集合 if (object instanceof List) { for (Object o : (List) object) { Map<String, String> validatedMap = validateEntityProperty(o, groups); map.putAll(validatedMap); } } else if (object instanceof Object[]) { // 数组 for (Object o : (Object[]) object) { Map<String, String> validatedMap = validateEntityProperty(o, groups); map.putAll(validatedMap); } } else { // 单个对象 Map<String, String> validatedMap = validateEntityProperty(object, groups); map.putAll(validatedMap); } if (map.size() > 0) { // 错误信息:获取map的第一个非空value String message = map.values().stream() .filter(Objects::nonNull) .findFirst() .orElse(""); return message; } return null; } /** * 校验对象,返回校验失败List信息 * * @param object 对象 * @param groups 组 * @return 校验失败List信息 */ public static List<String> validateEntity(Object object, Class<?>... groups) { List<String> list = new ArrayList<>(); Set<ConstraintViolation<Object>> validate = validator.validate(object, groups); for (ConstraintViolation<Object> violation : validate) { list.add(violation.getMessage()); } return list; } /** * 校验对象,返回校验失败Map信息 * * @param object 对象 * @param groups 组 * @return 校验失败Map信息,key为属性(字段名),value为校验失败信息 */ public static Map<String, String> validateEntityProperty(Object object, Class<?>... groups) { Map<String, String> map = new HashMap<>(); Set<ConstraintViolation<Object>> validate = validator.validate(object, groups); for (ConstraintViolation<Object> violation : validate) { map.put(violation.getPropertyPath().toString(), violation.getMessage()); } return map; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 1:54:12

2026 多模型 API 统一接入实战:基于 4sapi 实现生产级 AI 应用开发

前言在当下 AI 应用开发的工程化落地中&#xff0c;多模型能力整合已经成为行业标配。无论是 ToC 的智能对话产品、ToB 的企业级 AI 助手&#xff0c;还是面向垂直场景的代码生成、文档解析、多模态处理应用&#xff0c;都不再局限于单一厂商的大模型能力。但在实际开发过程中&…

作者头像 李华
网站建设 2026/4/17 1:53:10

openclaw配置飞书渠道

一、飞书注册及配置 1.1、注册登录飞书开发者后台 https://open.feishu.cn/app?langzh-CN 1.2、创建企业自建应用 1.3、填写应用名称及描述 1.4、添加应用能力 此处我们选择添加机器人 添加成功后在左侧菜单栏会出现机器人菜单 1.5、权限配置 进入权限管理菜单页&#xf…

作者头像 李华
网站建设 2026/4/17 1:49:14

STM32CubeIDE HAL库实战:MPU9250传感器数据读取全流程(附避坑指南)

STM32CubeIDE HAL库实战&#xff1a;MPU9250传感器数据读取全流程&#xff08;附避坑指南&#xff09; 在无人机、平衡车和机器人控制系统中&#xff0c;姿态传感器扮演着"感知器官"的关键角色。MPU9250作为一款集成了三轴加速度计、三轴陀螺仪和三轴磁力计的9轴运动…

作者头像 李华
网站建设 2026/4/17 1:46:17

深度学习驱动MOF材料逆向设计与自主合成!

深度学习驱动MOF材料逆向设计与自主合成&#xff01;https://mp.weixin.qq.com/s/-zGF6pmp9_udHOBpJ1bbZg点此链接查看详情&#xff01; 专题一&#xff1a;深度学习MOF材料 学习目标&#xff1a; 本课程旨在培养学员系统掌握MOF材料智能研发的全链条技术能力。通过四天密集…

作者头像 李华
网站建设 2026/4/17 1:46:14

用好 Semantic Scholar API:一条更聪明的学术检索路径

做科研或写技术博客久了&#xff0c;总会遇到一个问题&#xff1a;信息太多&#xff0c;但有效信息太少。 传统关键词搜索越来越难满足需求&#xff0c;这时候我开始接触 Semantic Scholar API。 这篇文章就从一个开发者视角&#xff0c;聊聊它是什么、能做什么&#xff0c;以…

作者头像 李华
网站建设 2026/4/17 1:45:35

Redis Cluster迁移数据踩坑全记录(含脚本)

Redis Cluster迁移数据踩坑全记录&#xff08;含脚本&#xff09;是一篇极具实用价值的经验分享&#xff0c;尤其适合正在或计划进行Redis集群迁移的开发者。文章不仅详细记录了迁移过程中遇到的各种问题&#xff0c;还提供了实用的脚本和解决方案&#xff0c;帮助读者少走弯路…

作者头像 李华