嵌套组合请求对象的校验与全局捕捉

个人名片
在这里插入图片描述
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?

  • 专栏导航:

码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀

目录

  • 嵌套组合请求对象的校验与全局捕捉
      • 引言
      • 1. 请求对象的定义与校验
        • 1.1 定义`FlowClientReserveListReq`
        • 1.2 定义`FlowControlReserveUpdateReq`
      • 2. 控制器中使用验证
      • 3. 全局异常处理
      • 4. 详细步骤总结
      • 结论

嵌套组合请求对象的校验与全局捕捉

引言

在现代Web开发中,确保请求数据的有效性是至关重要的,尤其是在处理复杂的嵌套组合请求对象时。本文将详细介绍如何在Spring Boot中进行嵌套组合请求对象的校验,并通过全局异常处理机制捕捉和处理验证错误,确保应用的健壮性和数据的完整性。

1. 请求对象的定义与校验

首先,我们定义了两个请求对象:FlowClientReserveListReqFlowControlReserveUpdateReq。其中FlowClientReserveListReq嵌套在FlowControlReserveUpdateReq中,形成复杂的嵌套组合请求对象。

1.1 定义FlowClientReserveListReq
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
public class FlowClientReserveListReq {@NotNull(message = "流量客户端Id不能为空")@ApiModelProperty(required = true, value = "流量客户端Id")private Long flowAppId;@NotNull(message = "渠道广告位Id不能为空")@ApiModelProperty(required = true, value = "媒体广告位Id")private Long channelAdId;@ApiModelProperty(value = "倍数")private Integer times;@Min(value = 0, message = "放量数量必须大于或等于零")@ApiModelProperty(value = "百分比")private Integer percent;private Long agentId;
}
1.2 定义FlowControlReserveUpdateReq
package com.middle.bean.req.flow.control;import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Range;import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;@Data
public class FlowControlReserveUpdateReq {@NotNull(message = "编号Id不能为空")@ApiModelProperty(required = true, value = "编号Id")private Long id;@Range(min = 1, max = 100, message = "点击率必须大于等于1,小于等于100")@NotNull(message = "点击率不能为空")@ApiModelProperty(required = true, value = "点击率")private Integer clickRate;@Valid@ApiModelProperty(value = "流量客户端列表")private List<FlowClientReserveListReq> clientListReqs;@NotBlank(message = "操作人不能为空")@ApiModelProperty(required = true, value = "操作人")private String opUser;@NotNull(message = "代理商id不能为空")@ApiModelProperty(value = "代理商ID", required = true)private Long agentId;private List<Long> channelAdIds;
}

2. 控制器中使用验证

在Spring Boot的控制器中,我们可以使用@Valid注解来触发对请求对象的校验。下面是一个示例:

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;import javax.validation.Valid;@RestController
@RequestMapping("/api")
public class FlowControlReserveController {@PostMapping("/reserve/update")public String updateFlowControlReserve(@Valid @RequestBody FlowControlReserveUpdateReq request) {// 处理请求逻辑return "Flow control reserve updated successfully";}
}

3. 全局异常处理

为了更好地处理验证错误,通常会使用全局异常处理器来捕获和处理这些异常。以下是一个示例:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;import java.util.HashMap;
import java.util.Map;@ControllerAdvice
public class GlobalExceptionHandler {@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {Map<String, String> errors = new HashMap<>();ex.getBindingResult().getFieldErrors().forEach(error -> errors.put(error.getField(), error.getDefaultMessage()));return ResponseEntity.badRequest().body(errors);}
}

4. 详细步骤总结

  1. 定义嵌套组合请求对象

    • 创建FlowClientReserveListReq类,添加必要的验证注解,如@NotNull@Min
    • 创建FlowControlReserveUpdateReq类,包含FlowClientReserveListReq对象的列表,并在字段上使用@Valid注解。
  2. 控制器中启用验证

    • 在控制器方法中,使用@Valid注解修饰请求参数,确保传入的对象满足验证规则。
  3. 全局异常处理

    • 创建全局异常处理器类,使用@ControllerAdvice@ExceptionHandler注解,捕获并处理MethodArgumentNotValidException,返回详细的错误信息。

结论

通过以上步骤,我们实现了对嵌套组合请求对象的校验,并通过全局异常处理机制捕捉和处理验证错误。这种方式不仅提高了数据的完整性和应用的健壮性,还使得代码更加简洁和可维护。在实际开发中,合理使用这些技术,可以大大提升开发效率和用户体验。

希望本文能够帮助你更好地理解和实现嵌套组合请求对象的校验与全局捕捉。如果你有任何疑问或建议,欢迎在评论区讨论。

在这里插入图片描述

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

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

相关文章

游戏AI的创造思路-技术基础-tanh函数详解

又来搞事情&#xff0c;总想着把sigmoid函数替换成其他函数作为激活函数&#xff0c;或者找到更合适某一段训练的函数&#xff0c;所以今天来聊聊tanh函数&#xff08;谁让咱当年差点去了数学系&#xff0c;结果还是在数学系转过去计算机的&#xff09; 目录 3.9. tanh函数详解…

反向沙箱技术:安全隔离上网

在信息化建设不断深化的今天&#xff0c;业务系统的安全性和稳定性成为各公司和相关部门关注的焦点。面对日益复杂的网络威胁&#xff0c;传统的安全防护手段已难以满足需求。深信达反向沙箱技术&#xff0c;以其独特的设计和强大的功能&#xff0c;成为保障政务系统信息安全的…

XTDrone-固定翼无人机编队跟踪无人车-配置教程

配置使用ROS版本为Neotic 1 配置 1.1 加载固定翼无人机编队跟踪控制工程文件 cp -r ~/XTDrone/coordination/fixed_wing_formation_control ~/catkin_ws/src 1.2 加载一些用到的功能包 sudo apt-get install ros-noetic-serial #根据自己的ROS版本修改 sudo apt-get insta…

209.力扣每日一题:质数的最大距离

代码解决 class Solution { public:// 判断一个数是否为质数bool isPrime(int n) {if (n < 1) {return false;}if (n < 3) {return true;}if (n % 2 0 || n % 3 0) {return false;}for (int i 5; i * i < n; i 6) {if (n % i 0 || n % (i 2) 0) {return false;…

如何利用GPT-4o生成有趣的梗图

文章目录 如何利用GPT-4o生成有趣的梗图一、引言二、使用GPT-4o生成梗图1. 提供主题2. 调用工具3. 获取图片实际案例输入输出 三、更多功能1. 创意和灵感2. 梗图知识 四、总结 如何利用GPT-4o生成有趣的梗图 梗图&#xff0c;作为互联网文化的一部分&#xff0c;已经成为了我们…

深圳比创达电子EMC|EMC电磁兼容性行业:推动电子产品向更高发展

随着科技的飞速发展&#xff0c;电子产品在我们的日常生活中无处不在&#xff0c;从智能手机到智能家居&#xff0c;从医疗设备到工业自动化&#xff0c;这些设备的普及和更新换代对电磁兼容性&#xff08;EMC&#xff09;提出了更高的要求。 一、EMC电磁兼容性行业的概述 EM…

mac有什么解压软件 mac怎么解压7z软件 苹果电脑好用的压缩软件有哪些

众所周知&#xff0c;macOS集成解压缩软件归档实用工具&#xff0c;可直接解压zip格式的压缩包。但对于其他比较常见的格式&#xff0c;诸如RAR、7z、TAR等&#xff0c;则无能为力&#xff0c;不过&#xff0c;我们可以选择大量第三方解压缩软件&#xff0c;帮助我们更好地完成…

2024.7.2作业

1. 梳理笔记(原创&#xff01;&#xff01;&#xff01;) 2.解析代码&#xff1a;分析每一步变量的取值 #include <stdio.h> int main(int argc, char *argv[]) { int a 10; //a10 int b a--; //b10 int c a b 2; //a9 b10 c21 int d (b--…

大模型参数规模扩大是趋势

©作者|TW 来源|神州问学 一、引言 近两年互联网科技领域&#xff0c;大模型成为了各大企业竞相发布的热点话题。百度、腾讯、阿里和华为等公司相继推出了自己的AI大模型&#xff0c;使得“大模型”这一概念迅速走入大众视野。大模型以其庞大的参数规模和强大的性能&…

玉林师范学院宿舍管理系统的设计与实现19633

玉林师范学院宿舍管理系统设计与实现 摘要&#xff1a;随着大学生人数的增加&#xff0c;宿舍管理成为高校管理中的重要问题。本论文旨在研究玉林师范学院宿舍管理系统&#xff0c;探讨其优势和不足&#xff0c;并提出改进建议。通过对相关文献的综述和实地调研&#xff0c;我们…

button1 <Button>: Missing Constraints in ConstraintLayout

书籍 《第一行代码 Android》第三版 开发 环境 Android Studio Jellyfish | 2023.3.1 问题 在学习3.2.2 创建和加载布局章节,在first_layout.xml中增加一个按钮button1时报错:"button1 <Button>: Missing Constraints in ConstraintLayout" 分析 产生这个…

【Python】已解决:NameError: name ‘unichr’ is not defined

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;NameError: name ‘unichr’ is not defined 一、分析问题背景 在使用Python进行编程时&#xff0c;有时会遇到“NameError: name ‘unichr’ is not defined”…

装箱单填写规范‼️

装箱单填写说明 出单方 (Issuer) 出单人的名称与地址&#xff0c;应与发票的出单方相同。在信用证支付方式下&#xff0c;此栏应与信用证受益人的名称和地址一致。 受单方 (TO) 受单方的名称与地址&#xff0c;应与发票的受单方相同。多数情况下填写进口商的名称和地址&#…

JavaScript常见数组方法的详细用法及示例

1.filter():检测数值元素&#xff0c;并返回符合条件所有元素的数组(具体要符合什么条件的的元素的函数方法需要我们自己去写)。示例如下 </head> <body><button id"but" onclick"test(arr)">点击出结果</button><div id"…

monkey大全!可直接运用在项目中的常规monkey命令

测试步骤 adb devices-----了解包名-----adb shell monkey -----p 包名 ----v 运行次数&#xff08;多个参数的组合形成不同的用例以求最大的覆盖&#xff09;-----当崩溃或无响应时分析monkey日志 常规monkey命令 &#xff08;可直接在项目里使用&#xff09; adb shell m…

固定翼无人机入门(二)

这里讲讲无人机的路径跟踪控制相关知识&#xff0c;路径跟踪需要制导率&#xff08;平面&#xff09;和控制器&#xff0c;在无人机中较为常用的是L1制导率&#xff0c;不过L1制导率是控制无人机在二维平面上的转向&#xff0c;此处还引入总能量控制&#xff0c;控制无人机的高…

用MySQL+node+vue做一个学生信息管理系统(五):学生信息增删改的实现

先实现增加信息&#xff1a; post参数的获取&#xff1a;express中接受post请求参数需要借助第三方包 body-parser 下载npm install body-parser //引入body-parser模块 const bodyParser require(body-parser); //拦截所有请求,配置body-parser模块 //extended:false 方法…

视频太大怎么压缩变小?6款视频压缩软件免费版分享

视频太大怎么压缩得又小又清晰呢&#xff1f;无论是视频文件传输、视频文件存储&#xff0c;还是进行自媒体视频上传&#xff0c;都对视频文件的大小有一定的限制。高质量的视频文件往往伴随着文件占据大量存储空间&#xff0c;导致文件传输速度变慢。今天教大家6种视频压缩软件…

拥抱智能化,WMS系统让仓库管理精细化与人性化结合-亿发

在当今竞争激烈的市场环境中&#xff0c;仓库管理不再是简单的货物存储和流通&#xff0c;而是一个复杂而精细的管理系统。仓库管理系统&#xff08;Warehouse Management System, WMS&#xff09;作为现代仓库管理的核心技术&#xff0c;通过“有过程”的管理理念&#xff0c;…

真的假不了,假的真不了

大家好&#xff0c;我是瑶琴呀&#xff0c;拥有一头黑长直秀发的女程序员。 最近&#xff0c;17岁的中专生姜萍参加阿里巴巴 2024 年的全球数学竞赛&#xff0c;取得了 12 名的好成绩&#xff0c;一时间在网上沸腾不止。 从最开始的“数学天才”&#xff0c;到被质疑&#xff…