SpringBoot 更新业务场景下,如何区分null是清空属性值 还是null为vo属性默认值?
先看歧义现象
值为null


未传递此属性


所以此时如何区分null 时传递进来的的null,还是属性的默认值null?
引入方案
引入过滤器,中间截获requestBodyData并保存到HttpServletRequest,业务层从HttpServletRequest 获取到requestBodyData辅助判断此属性为未传递还是值为null
第1步:定义并注册过滤器
自定义过滤器截获requestBodyData并保存到HttpServletRequest
import com.practisesvr.utils.http.FilterHttpServletRequest;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.GenericFilterBean;import java.io.IOException;@Component
public class RequestCheckFilter extends GenericFilterBean {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.err.println("***RequestHeaderCheckFilter.doFilter.start***");if (!(request instanceof HttpServletRequest)) {throw new IllegalStateException("Expected HttpServletRequest");}HttpServletRequest httpRequest = (HttpServletRequest) request;FilterHttpServletRequest filterHttpRequest = new FilterHttpServletRequest(httpRequest);String body = filterHttpRequest.getBody();filterHttpRequest.setAttribute("requestBodyData", body);// 继续执行filter链chain.doFilter(filterHttpRequest, response);System.err.println("***RequestHeaderCheckFilter.doFilter.end***");}
}
[Ref: 过滤器使用到 HttpServletRequestWrapper 参考如下 ] What is HttpServletRequestWrapper does?
注册过滤器
@Configuration
public class AppConfig {@Beanpublic FilterRegistrationBean<RequestCheckFilter> requestCheckFilterRegistration() {FilterRegistrationBean<RequestCheckFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new RequestCheckFilter());// 可以设置过滤器名称registration.setName("requestCheckFilter");// 设置拦截规则registration.addUrlPatterns("/*"); // 拦截所有请求// 设置过滤器执行顺序,默认为0,数值越小优先级越高registration.setOrder(2);return registration;}
}
第2步:从HttpServletRequest 获取到requestBodyData
public class RequestIUtils {/*** 从当前请求上下文中获取并解析请求体数据,将其转换为Map类型对象.** @return 如果成功获取到请求体数据并转换成功,则返回一个包含请求体内容的Map对象;* 若RequestAttributes不存在或请求体数据为空,则返回一个新的空HashMap对象。*/public static Map<String, Object> getRequestBodyBody() {RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();if (requestAttributes == null) {return new HashMap<>();}HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();Object requestBody = request.getAttribute("requestBodyData");if (requestBody == null) {return new HashMap<>();}return JsonUtils.jsonToT(requestBody.toString(), Map.class);}
}
第3步:业务层使用requestBodyData辅助判断
@Override
public Student update(Student student) {Map<String, Object> requestBody = RequestIUtils.getRequestBodyBody();Student stu = new Student();stu.setId(student.getId());stu.setUsername(student.getUsername());stu.setPassword(student.getPassword());stu.setAge(student.getAge());stu.setHeight(student.getHeight());stu.setGender(student.getGender());// 使用方式if (requestBody.containsKey("classId")){stu.setClassId(student.getClassId());}stu.setIsDelete(student.getIsDelete());this.studentsMapper.update(student);return this.queryById(student.getId());
}




相关文章:
SpringBoot 更新业务场景下,如何区分null是清空属性值 还是null为vo属性默认值?
先看歧义现象 值为null 未传递此属性 所以此时如何区分null 时传递进来的的null,还是属性的默认值null? 引入方案 引入过滤器,中间截获requestBodyData并保存到HttpServletRequest,业务层从HttpServletRequest 获取到requestBodyData辅…...
【深度学习每日小知识】NLP 自然语言处理
自然语言处理 (NLP) 是人工智能 (AI) 的一个子领域,处理计算机和人类(自然)语言之间的交互。它涉及使用算法和统计模型使计算机能够理解、解释和生成人类语言。 NLP 是人工智能领域的重要工具,广泛应用于语言翻译、文本分类和聊天…...
一文理解Python选择语句
在编程领域中,条件判断和选择是非常基础而且重要的一个部分。Python 作为一种被广泛应用的编程语言,提供了多种选择语句来满足不同的条件判断需求。本文将深入探讨 Python 中的选择语句,包括 if 语句、elif 语句、else 语句、简写的条件表达式…...
MyBatis XML 映射文件中的 SQL 语句可以分为动态语句和静态语句
目录 静态查询: 动态查询: 静态更新: 动态更新: 静态删除: 动态删除: 动态语句和静态语句在 MyBatis 中的作用如下: 静态查询: 静态查询是指在 SQL 语句中执行固定的查询操作…...
Flask用于生产环境
Flask是一个用Python编写的轻量级Web应用框架,可以用于开发和部署Web服务。要安装Flask,您需要以下步骤: - 安装Python和pip,如果您还没有的话。 - 创建一个虚拟环境,以便隔离您的Flask应用程序和其他Python项目。 - …...
程序员如何向上管理,升职加薪
向上管理 多向领导展示自己的工作量。 解决完问题,可以把领导拉到群里,不然你解决了问题,领导都不知道。 积极向领导汇报,及时反馈任务进度,反馈遇到的问题。 要学会表现自己,光说不干假把式,…...
Microsoft Word 删除空行
Microsoft Word 删除空行 1. 删除空行1.1. 替换1.2. 段落标记 References 1. 删除空行 1.1. 替换 1.2. 段落标记 特殊格式 -> 段落标记 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/...
基于一次应用卡死问题所做的前端性能评估与优化尝试
问题背景 在上个月,由于客户反馈客户端卡死现象但我们远程却难以复现此现象,于是我们组织了一次现场上门故障排查,并希望基于此次观察与优化,为客户端开发提供一些整体的优化升级。当然,在尝试过程中,也发…...
JVM(上)
目录 一、JVM概述 一、JVM作用 二、JVM整体组成部分 二、JVM结构-类加载 一、类加载子系统概述 二、类加载过程 1.加载 2.链接 3.初始化(类加载过程中的初始化) 三、类加载器分类 大致分两类: 细致分类: 四、双亲委派机制 五、打…...
【js】js 异步机制详解 Generator / Async / Promise
三种语法功能放在一起,是因为他们都有相似特点: 维护某种状态在未来恢复状态并执行 本文重点回答以下几个问题: 为什么 Generator 和 Async 函数的 代码执行流 都可以简化成树形结构?async 函数为什么返回一个 promise…...
【动态规划】【数学】【C++算法】805 数组的均值分割
作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及知识点 动态规划 数学 805 数组的均值分割 给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 数组 或者 B 数组中,使得 A 数组和 B 数组不为空,并且 average(A) average(B)…...
Django笔记(五):模型models
首 Django中的模型对应数据库中的一张表格。 定义模型 player.py from django.db import modelsclass Player(models.Model):idx models.IntegerField(uniqueTrue)def __str__(self):return str(self.id)每个模型需要继承models类,如上Player模型定义了一个整形…...
一个golang小白使用vscode搭建Ununtu20.04下的go开发环境
文章目录 前言搭建go环境下载go安装包解压go压缩包完成安装配置环境变量编写一个helloword程序 安装VSCode插件安装智能提示插件安装go依赖包修改代理并重新安装依赖包 go.mod 和 go.workgo.modgo.work小试一下go.work 总结 前言 先交代一下背景,距离正式接触golan…...
【复现】Hytec Inter HWL 2511 SS路由器RCE漏洞_25
目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 Hytec Inter HWL 2511 SS是日本Hytec Inter 公司的一款工业级 LTE 路由器,可用于远程数据传输,例如收集传…...
Kafka系列(四)
本文接kafka三,代码实践kafkaStream的应用,用来完成流式计算。 kafkastream 关于流式计算也就是实时处理,无时间概念边界的处理一些数据。想要更有性价比地和java程序进行结合,因此了解了kafka。但是本人阅读了kafka地官网&#…...
【Linux学习】进程信号
目录 十七.进程信号 导言 17.1 linux中的信号列表 17.2 标准信号与实时信号 17.3 信号的产生 17.3.1 通过终端按键产生信号 17.3.2 调用系统函数产生信号 17.3.3 软件条件产生信号 17.3.4 硬件异常产生信号 17.3.5 【补充】核心转储 Core Dump 17.4 信号的阻塞 17.4.1 信号相关…...
机器学习没那么难,Azure AutoML帮你简单3步实现自动化模型训练
在Machine Learning 这个领域,通常训练一个业务模型的难点并不在于算法的选择,而在于前期的数据清理和特征工程这些纷繁复杂的工作,训练过程中的问题在于参数的反复迭代优化。 AutoML 是 Azure Databricks 的一项功能,它自动的对…...
数学建模实战Matlab绘图
二维曲线、散点图 绘图命令:plot(x,y,’line specifiers’,’PropertyName’,PropertyValue) 例子:绘图表示年收入与年份的关系 ‘--r*’:--设置线型;r:设置颜色为红色;*节点型号 ‘linewidth’:设置线宽࿱…...
TypeError the JSON object must be str, bytes or bytearray, not ‘list‘
在使用python的jason库时,偶然碰到以下问题 TypeError: the JSON object must be str, bytes or bytearray, not ‘list’ 通过如下代码可复现问题 >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> import json >>> ra json.loads(a) Trac…...
数字IC后端设计实现 | PR工具中到底应该如何控制density和congestion?(ICC2Innovus)
吾爱IC社区星友提问:请教星主和各位大佬,对于一个模块如果不加干预工具会让inst挤成一团,后面eco修时序就没有空间了。如果全都加instPadding会导致面积不够overlap,大家一般怎么处理这种问题? 在数字IC后端设计实现中…...
MogFace人脸检测模型-WebUI详细步骤:如何通过service_ctl.sh管理服务生命周期
MogFace人脸检测模型-WebUI详细步骤:如何通过service_ctl.sh管理服务生命周期 1. 服务管理工具介绍 MogFace人脸检测服务提供了一个强大的管理工具service_ctl.sh,这个脚本让你能够轻松控制服务的整个生命周期。无论你是需要启动、停止、重启服务&…...
机械设计制造及自动化—万门大学月特训班 (清华老师讲授) 1、机械制图 2、机械制造 3、机械原理 4、机械设计
机械设计制造及自动化—万门大学月特训班 (清华老师讲授) 1、机械制图 2、机械制造 3、机械原理 4、机械设计 全580集,直接从零基础到机械设计与自动化行业大佬 在这里插入图片描述...
Stable Yogi Leather-Dress-Collection 一键部署教程:基于Ubuntu的快速环境搭建
Stable Yogi Leather-Dress-Collection 一键部署教程:基于Ubuntu的快速环境搭建 最近在折腾AI图像生成,发现了一个挺有意思的模型叫Stable Yogi Leather-Dress-Collection。听名字就知道,它特别擅长生成皮革、连衣裙这类时尚单品的设计图。对…...
libvirt 有哪些命令
除了 virsh 外,还有很多有意思的命令。virt-manager 用于打开 libvirt 交互的界面除了连接本地电脑,也可以访问远程电脑的 libvirtd 服务virt-clone 快速克隆一个虚拟机。在 virt-manager 界面上也集成了这个功能。如下图,就是这么简单快捷&a…...
终极防撤回解决方案:RevokeMsgPatcher完全攻略
终极防撤回解决方案:RevokeMsgPatcher完全攻略 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/GitHu…...
猫抓插件:5分钟掌握浏览器视频下载终极指南
猫抓插件:5分钟掌握浏览器视频下载终极指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经遇到过想要保存网页视频却找不到下载按钮的烦恼?或者想收藏在线音乐却只…...
从一次数据精度丢失的坑说起:详解Pandas fillna的‘静默下转型’与infer_objects的正确用法
从数据精度陷阱到稳健处理:Pandas类型转换的深度防御实践 1. 当.fillna(0)成为数据分析的隐形杀手 凌晨三点的办公室,咖啡杯早已见底。数据分析师李明盯着屏幕上诡异的报表结果——所有百分比计算结果突然变成了整齐的整数。这个看似简单的数据清洗操作…...
OpenSSL实战:手把手教你创建自签名根证书
1. 为什么需要自签名根证书? 想象一下你正在搭建一个内部测试环境,或者为公司的内部系统建立一套专属的安全通信机制。这时候你会发现,所有涉及HTTPS的环节都需要SSL/TLS证书。如果直接购买商业CA颁发的证书,不仅成本高ÿ…...
快速上手腾讯混元OCR:部署过程常见错误及解决方法合集
快速上手腾讯混元OCR:部署过程常见错误及解决方法合集 1. 认识腾讯混元OCR 腾讯混元OCR(HunyuanOCR)是一款基于腾讯混元原生多模态架构的端到端OCR专家模型。作为一款轻量级但功能强大的文字识别工具,它仅用1B参数就实现了多项业…...
模型安全实践:实时手机检测-通用输入图像异常检测(模糊/过曝/裁剪)
模型安全实践:实时手机检测-通用输入图像异常检测(模糊/过曝/裁剪) 1. 项目简介与核心价值 在日常的手机检测应用中,我们经常会遇到各种图像质量问题:图片模糊看不清手机细节、光线过曝导致手机轮廓丢失、或者图片被…...
