ControllerAdvice定义统一异常处理
springboot版本:2.6.13<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
在实体上添加校验注解,例如:
@NotBlank@NotEmpty@NotNullprivate String name;
设置自定义校验注解
package com.xdtmall.common.valid;import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;@Documented
//使用什么校验器
@Constraint(validatedBy = { ListValueConstraintValidator.class })
//标注注解能用在什么位置;方法;属性;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
//校验注解的时机 运行时获取
@Retention(RetentionPolicy.RUNTIME)
public @interface ListValue {String message() default "{javax.validation.constraints.NotBlank.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};int[] vals() default {};
}
public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> {private Set<Integer> set =new HashSet<>();//初始化方法@Overridepublic void initialize(ListValue constraintAnnotation) {int[] vals = constraintAnnotation.vals();System.out.println(vals);for (int val : vals) {set.add(val);}}//判断是否校验成功/**** @param integer 需要校验的值* @param constraintValidatorContext* @return*/@Overridepublic boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {return set.contains(integer);//判断是否包含}
}
分组校验:
1、新建组的接口
2、绑定到相应的组
@NotNull(message = "修改必须指定id",groups = {UpdateGroup.class})@Null(message = "新增不能指定id",groups = {AddGroup.class})@TableIdprivate Long brandId;@NotBlank(message = "品牌名不能为空",groups = {AddGroup.class,UpdateGroup.class})private String name;@NotNull(groups = {AddGroup.class})@URL(message = "logo必须是一个合法的url地址",groups = {AddGroup.class,UpdateGroup.class})private String logo;private String descript;@NotNull(groups = {AddGroup.class,UpdateStatusGroup.class})/*使用自定义校验注解*/@ListValue(vals={0,1},groups = {AddGroup.class, UpdateStatusGroup.class})private Integer showStatus;@NotNull(groups = {AddGroup.class})@Pattern(regexp = "^[a-zA-Z]$",message = "检索首字母必须是一个字母",groups = {AddGroup.class, UpdateGroup.class})private String firstLetter;@NotNull(groups = {AddGroup.class})@Min(value = 0,message = "排序必须大于等于0",groups = {AddGroup.class,UpdateGroup.class})private Integer sort;
controller修改成@Validated(绑定的组)
@RequestMapping("/update")//@RequiresPermissions("product:brand:update")public R update(@Validated(UpdateGroup.class) @RequestBody BrandEntity brand){brandService.updateById(brand);return R.ok();}
@RequestMapping("/update")//@RequiresPermissions("product:brand:update")public R update(@Valid @RequestBody Entity erand, BindingResult bindingResult){if (bindingResult.hasErrors()) {//如果有校验错误,返回第一个校验信息List<ObjectError> allErrors = bindingResult.getAllErrors();System.out.println(allErrors);//将错误信息返回或者抛异常全局处理。}entityService.updateById(brand);return R.ok();}
在controller添加,例如:
@RequestMapping("/update")//@RequiresPermissions("product:brand:update")public R update(@Valid @RequestBody Entity erand, BindingResult bindingResult){if (bindingResult.hasErrors()) {//如果有校验错误,返回第一个校验信息List<ObjectError> allErrors = bindingResult.getAllErrors();System.out.println(allErrors);//将错误信息返回或者抛异常全局处理。}entityService.updateById(brand);return R.ok();}
使用@RestControllerAdvice统一处理异常信息
@RestControllerAdvice
@Slf4j
public class productExceptionControllerAdvice {@ExceptionHandler(Exception.class)public R handleValidException(MethodArgumentNotValidException e) {log.error("数据效验出现问题{},异常类型{}",e.getMessage(),e.getClass());BindingResult bindingResult = e.getBindingResult();Map<String,String> errMap = new HashMap<>();bindingResult.getFieldErrors().forEach((fieldError) -> {errMap.put(fieldError.getField(),fieldError.getDefaultMessage());});return R.error("校验异常").put("data",errMap);}
}相关文章:
ControllerAdvice定义统一异常处理
springboot版本:2.6.13<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>在实体上添加校验注解,例如: NotBlankNotEmpty…...
Leetcode 162.寻找峰值
峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须实现时间复杂度为 O(…...
c语言:知识补充
c语言中编译开始会对#define,#include等内容做预处理,可以用#define写一些简单函数,方便使用 #include <stdio.h> #include <stdlib.h>#define MAX(A, B) ((A) > (B) ? (A) : (B))int main(){printf("%d\n", MAX(…...
Dapper介绍及特性
一、Dapper介绍及特性 Dapper是一个.NET平台上的轻量级对象关系映射(ORM)工具,它通过扩展IDbConnection接口,提供了一系列的扩展方法来执行SQL查询并将结果映射到.NET对象中。Dapper以其高性能和简单易用著称,特别适合…...
LeetCode 149. 直线上最多的点数
LeetCode 149. 直线上最多的点数 给你一个数组 points ,其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 输入:points [[1,1],[2,2],[3,3]] 输出:3 示例 2: 输入&…...
案例研究丨国控星鲨利用DataEase释放数据潜能,重塑业务视野
国药控股星鲨制药(厦门)有限公司(以下简称为国控星鲨)始创于1952年,前身为厦门鱼肝油厂,距今已经有70余年历史,是国家商务部认定的“中华老字号”企业。2011年,国药控股与厦门轻工集…...
网络基础概念和 socket 编程
网络基础概念和 socket 编程 学习目标: 了解 OSI 七层模型、TCP/IP 四层模型结构了解常见的网络协议格式掌握网络字节序和主机字节序之间的转换理解 TCP 服务器端通信流程理解 TCP 客户端通信流程实现 TCP 服务器端和客户端的代码 推荐一个非常好的学习资料仓库 协…...
TypeScript 中的接口、泛型与自定义类型
TypeScript 是一种超集语言,它为 JavaScript 添加了静态类型检查。通过 TypeScript,开发者可以获得更好的工具支持,并且能够编写出更加健壮的代码。本文将探讨 TypeScript 中的几个关键特性:接口、泛型以及如何创建自定义类型。 …...
常州威雅学校:跟随这场音乐盛宴,溯回她的音乐之路
时同学 常州威雅2021届毕业生 英国皇家北方音乐学院 钢琴系 西太湖畔清凉的晚风送来阵阵悦耳的钢琴声,时同学在母校的个人钢琴独奏悄然拉开序幕。这是她自毕业三年后,在常州威雅的首场钢琴独奏会。 随着第一个音符落下,她用手指在黑白键盘…...
【YashanDB知识库】由于hist_head$中analyze time小于tab$中analyze time导致的sql语句执行慢
本文内容来自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7459465.html?templateId1718516 问题现象 某局点yashandb cpu使用率100%,经线上分析是由于几个sql执行慢,其中一个sql为简单的单行等值绑定变量过滤排序。 经分…...
【有啥问啥】深度理解主动学习:机器学习的高效策略
深度理解主动学习:机器学习的高效策略 在大数据时代,数据量的爆炸性增长与有限的标注资源之间的矛盾日益凸显。如何高效地利用标注资源来训练高质量的模型,成为了机器学习领域亟待解决的问题。主动学习(Active Learning, AL&…...
智能守护者X100 - 自动化生产线智能机器人安全监控管理系统
1.产品介绍 产品名称: 智能守护者X100 - 自动化生产线智能机器人安全监控管理系统 主要功能: 全方位实时监控:智能守护者X100采用高清摄像头与红外夜视技术,实现对自动化生产线及智能机器人的360无死角监控。系统能自动识别并追踪生产线上的机器人活动轨迹,确保生产安全…...
harmonyos面试题
你在项目中用过线程通信吗,线程是怎么进行通信的? 页面的生命周期有哪些? UAbility的生命周期呢? 你在项目中使用首选项主要用来数什么 组件通信的方式有息些 弹室UI是怎么在页面UI中使用的 常用的修饰符有愿些介绍一下 缓冲区是什么与16进制和数组有什么关…...
神经网络介绍及其在Python中的应用(一)
作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~ 个人主页:小高要坚强的博客 当前专栏:Python之机器学习 本文内容:神经网络介绍及其在Python中的线性回归应用 作者“三要”格言:要坚…...
数据流处理技术与Flink框架
一数据流 数据流定义: 数据流(Data Stream)是指数据以连续不断的方式到达和处理的序列。在现实世界中,许多数据来源都是以流的形式存在,比如: 1. 用户行为:用户在网站上的点击流、移动应用中…...
qt中QTatlewidget类常用操作表格的函数有哪些?
在Qt中,QTableWidget 类提供了丰富的函数来操作表格数据。以下是一些常用的操作表格的函数: 1. 初始化与配置 构造函数:QTableWidget(int rows, int columns, QWidget *parent nullptr):创建一个指定行数和列数的表格控件。设置…...
Linux上的C/C++编程
Linux上的C/C编程 yum软件包管理器Linux编辑器-vimvim命令模式指令集vim末行模式指令集 gcc/g的使用Linux自动化编译工具-make/MakefileLinux调试器-gdb调试命令 多人合作工具git yum软件包管理器 yum 是Linux上常用的包管理器,类似于Windows上的“应用商店”。 语…...
注意 秋季饮酒的正确打开方式
选择合适的白酒1.秋季气候干燥,适合选择一些口感醇厚、温润的白酒。比如酱香型白酒,它具有浓郁的香气和醇厚的口感,能在秋季给你带来温暖的感觉。2.浓香型白酒也是不错的选择,香气扑鼻,口感绵甜,能为秋季增…...
Python如何配置环境变量详解
一、概述 前提:已安装 Python,如下图: 1.1 检查是否已配置成功(选) 1 2 3 4 5 1. 打开运行窗口 (1) 快捷键 : Win r,并输入 cmd (2) 直接输入: Python 2. 若有下列提示,即为 安装成功…...
Linux驱动开发(速记版)--并发与竞争
第十八章 并发与竞争 18.1 并发与竞争 18.1.1 并发 早期计算机 CPU单核心时,由于 CPU执行速度快于I/O操作,常因等待 I/O而空闲。 为提高 CPU利用率,引入了并发执行理论。并发通过算法在CPU执行I/O等待时切换至其他任务,使多个任…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
