SpringBoot 后端接收参数优化(统一处理前端参数)

在使用 SpringBoot+ MyBatisPlus 框架的项目,写了个后端统一处理前端post提交的json格式的查询参数类,赖得手工一个一个参数处理(把要查询的参数交给前端)。

使用示例代码:

    @PostMapping("/list")public String list1(@RequestBody PageParam pageParam) {IPage<ChargeRule> page = new Page<>(pageParam.getCurrent(), pageParam.getSize());QueryWrapper<ChargeRule> queryWrapper = pageParam.getQueryWrap(ChargeRule.class);return RespUtil.respSucc( chargeRuleService.page(page, queryWrapper));}

统一处理前端参数,代码如下:


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;/*** @author zhenhua* @Description 针对前端的分页与查询参数封装* @date 2024/06/24*/
public class PageParam {/*** 第几页码*/Long current;/*** 每页条数*/Long size;/*** 查询条件内容*/JSONObject query;/*** 排序字段*/String order;public Long getCurrent() {return current;}public void setCurrent(Long current) {this.current = current;}public Long getSize() {return size;}public void setSize(Long size) {this.size = size;}public JSONObject getQuery() {return query;}public void setQuery(JSONObject query) {this.query = query;}public String getOrder() {return order;}public void setOrder(String order) {this.order = order;}/*** 查询条件 限定生成在clazz 类中的字段* @return*/public QueryWrapper getQueryWrap(Class clazz) {QueryWrapper qw = new QueryWrapper();if (this.query != null) {Set<String> fieldNames = new HashSet<>();if(clazz!=null){for (Field field : clazz.getDeclaredFields()) {fieldNames.add(field.getName());}}for (Map.Entry<?, ?> entry : query.entrySet()) {Object key = entry.getKey();Object valueObj = entry.getValue();if (valueObj != null) {String value = valueObj.toString().trim();if (StringUtils.isNotEmpty(value)) {if (key != null) {String keyStr = (String) key;// 检查 clazz 类中是否有该字段if (fieldNames.contains(keyStr)) {String fieldName = camelToSnakeCase(keyStr);if (fieldName.contains("time") || fieldName.contains("date")) {// 时间相关的外层处理} else if (keyStr.contains("type") && valueObj instanceof Integer) {qw.eq(fieldName, value);} else {qw.like(fieldName, value);}}}}}}}return qw;}/*** 查询条件 前端所有字段都会封装,如果后端不需要该字段,会报错* @return*/@Deprecatedpublic QueryWrapper getQueryWrap() {return getQueryWrap(null);}/*** 把驼峰命名转换为下划线命名* @param camelCaseStr* @return*/public static String camelToSnakeCase(String camelCaseStr) {return camelCaseStr.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase();}/*** 获取前端参数* @param key* @return*/public <T>T getParam(String key){if(this.query==null){return null;}return (T) this.query.get(key);}/*** 获取对象* @param* @return*/public <T>T getJavaBean(Class<T> clazz) {if(this.query==null){return null;}return JSONObject.parseObject(JSONObject.toJSONString(this.query),clazz);}
}

注意,springboot要配置可以接收任意参数。 

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

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

相关文章

PyQt5 数据库操作详细教程

PyQt5 数据库操作详细教程 PyQt5 提供了丰富的数据库操作功能&#xff0c;使得在图形用户界面&#xff08;GUI&#xff09;应用程序中进行数据库连接和操作变得简单。本教程将详细介绍如何使用 PyQt5 连接和操作数据库&#xff0c;包括 SQLite、MySQL 等&#xff0c;并通过丰富…

门控循环单元(GRU)及其预测和分类Python实现

门控循环单元&#xff08;Gated Recurrent Unit&#xff0c;简称GRU&#xff09;是一种常用于处理序列数据的循环神经网络&#xff08;RNN&#xff09;变种。GRU模型结合了长短时记忆网络&#xff08;LSTM&#xff09;和标准循环神经网络的优点&#xff0c;通过门控机制帮助网络…

深入解析Perl的正则表达式:功能、应用与技巧

在编程世界中&#xff0c;正则表达式是一种强大的文本处理工具&#xff0c;它能够用于搜索、替换、匹配字符串等操作。Perl语言以其强大的文本处理能力著称&#xff0c;而其正则表达式功能更是其核心特性之一。本文将深入探讨Perl中的正则表达式&#xff0c;包括其基本语法、应…

微服务安全——OAuth2详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

EXO-chatgpt_api 解释

目录 chatgpt_api 解释 resolve_tinygrad_tokenizer 函数 resolve_tokenizer 函数 调试和日志记录 参数 返回值 初始化方法 __init__ 异步方法 注意事项 chatgpt_api 解释 展示了如何在一个项目中组织和导入各种库、模块和类,以及如何进行一些基本的Web服务设置和配置…

Sparksql常用的json相关函数

前言 在大数据处理中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Apache Spark 提供了丰富的功能来处理 JSON 数据,尤其是通过 Spark SQL 的 JSON 函数。本文将深入探讨 Spark SQL 中的 JSON 函数,并使用…

机器学习 | 回归算法原理——最小二乘法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。很早便想学习并总结一本很喜欢的机器学习图书——立石贤吾的《白话机器学习的数学》&#xff0c;可谓通俗易懂&#xff0c;清晰形象。那就在此分享并作为学习笔记来记录我的学习过程吧&#xff01;本章的回归算法原理基于《基于…

智能化数据安全分类分级实践

在当今数字化浪潮的迅猛推进下&#xff0c;企业和组织正遭遇前所未有的数据安全治理挑战。随着海量数据的不断产生、传输、存储和应用&#xff0c;它们面临着来自黑客攻击、内部人员恶意泄露以及数据误操作等多重安全威胁的侵袭。因此&#xff0c;构建一个健全的数据安全治理体…

【快速逆向四/无过程/有源码】浙江工商职业技术学院 统一身份认证

逆向日期&#xff1a;2024.07.23 使用工具&#xff1a;Node.js 加密方法&#xff1a;RSAUtils 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xf…

Unity ShaderLab基础

[原文1] [参考2] 一 基础知识 1. 1 着色器语言分类: 语言说明HLSL基于 OpenGL 的 OpenGL Shading LanguageGLSL基于 DirectX 的 High Level Shading LanguageCGNVIDIA 公司的 C for GraphicShader LabUnity封装了CG,HLSL,GLSL的Unity专用着色器语言,具有跨平台,图形化编程,便…

Redis 主从搭建

Redis主从搭建 7.2.5 文章目录 一. 同主机搭建Redis主从1. 环境介绍2. 环境前准备工作3. 安装 Redis 7.2.54. redis 配置修改并且启动4.1 修改配置文件4.2 编写启动脚本 5. 开启主从5.1 开启5.2 主库实例查看主从信息5.3 从库实例查看主从信息5.4 验证主从配置是否生效 6. 解除…

Modbus转BACnet/IP网关BA100-配硬件说明

在现代自动化系统中&#xff0c;不同设备和系统之间的通信至关重要&#xff0c;Modbus和BACnet/IP协议虽然各有优势&#xff0c;但它们之间的直接通信存在障碍。钡铼Modbus转BACnet/IP网关作为连接这两种协议的桥梁&#xff0c;允许不同系统之间的无缝数据交换。 一、Modbus转…

Ubuntu22.04安装X11vnc方法

一、问题描述 客户想使用Ubuntu图形化功能,需要远程去操作界面 二、安装方法如下 通常情况&#xff0c;ubuntu不允许root用户运行GUI程序。因此&#xff0c;我们创建普通用户进行安装配置X11vnc服务 1.安装x11vnc程序包 sudo apt-get update sudo apt-get install -y x11v…

内网隧道——HTTP隧道

文章目录 一、ReGeorg二、Neo-reGeorg三、Pivotnacci 实验网络拓扑如下&#xff1a; 攻击机kali IP&#xff1a;192.168.111.0 跳板机win7 IP&#xff1a;192.168.111.128&#xff0c;192.168.52.143 靶机win server 2008 IP&#xff1a;192.168.52.138 攻击机与Web服务器彼此之…

React的生命周期?

React的生命周期分为三个主要阶段&#xff1a;挂载&#xff08;Mounting&#xff09;、更新&#xff08;Updating&#xff09;和卸载&#xff08;Unmounting&#xff09;。 1、挂载&#xff08;Mounting&#xff09; 当组件实例被创建并插入 DOM 时调用的生命周期方法&#x…

pdf压缩在线免费 pdf压缩在线免费网页版 在线pdf压缩在线免费 pdf压缩工具在线免费

在数字化时代&#xff0c;pdf文件已经成为我们工作、学习和生活中的重要组成部分。然而&#xff0c;体积庞大的pdf文件往往给我们的存储空间、传输速度带来不小的压力。本文将为您揭秘几种简单有效的pdf文件压缩方法&#xff0c;让您轻松应对文件体积过大带来的困扰。 方法一、…

PLC通过IGT-SER系列智能网关快速实现WebService接口调用案例

IGT-SER系列智能网关支持PLC设备数据对接到各种系统平台&#xff0c;包括SQL数据库&#xff0c;以及MQTT、HTTP协议的数据服务端&#xff1b;通过其边缘计算功能和脚本生成的工具软件&#xff0c;非常方便快速实现PLC、智能仪表与WebService服务端通信。 本文是通过智能网关读取…

探索Perl的图形用户界面开发:工具、技巧与实践

在计算机编程领域&#xff0c;图形用户界面&#xff08;GUI&#xff09;的开发是提升用户体验的关键环节。Perl&#xff0c;作为一种功能强大的脚本语言&#xff0c;同样提供了多种工具和库来支持GUI的开发。本文将详细介绍Perl中进行GUI开发的几种主要方法&#xff0c;包括使用…

如何切换网络IP地址?IP切换的应用与方法

随着互联网的发展和普及&#xff0c;我们日常生活中的各种操作和通讯越来越依赖互联网。互联网上存在的一些问题和限制使得更换IP地址成为必要的步骤。下面我们将探讨在互联网业务中&#xff0c;需要更换IP地址的原因与方法。 一、IP轮换的应用 解决访问限制&#xff1a;解决访…

Intellij IDEA多模块分组 实现move to group

新版本idea&#xff0c;没有了move to group的功能&#xff0c;导致模块很多的时候不能分组。2018版本有。 这个分组是虚拟的&#xff0c;不会在磁盘中实际存在。 要实现这个功能&#xff0c;只需要改modules.xml即可。 步骤 1. 找到配置文件 .idea目录下的moudules.xml 2.…