SpringBoot后端接收参数优化代码示例(统一处理前端参数)
更新时间:2024年07月25日 10:14:26 作者:qyhua
使用Spring Boot开发API的时候,读取请求参数是服务端编码中最基本的一项操作,下面这篇文章主要给大家介绍了关于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 */ @Deprecated public 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要配置可以接收任意参数。
总结
到此这篇关于SpringBoot后端接收参数优化的文章就介绍到这了,更多相关SpringBoot后端接收参数优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java使用itextpdf实现生成PDF并添加图片,水印和文字
这篇文章主要为大家详细介绍了Java在使用itextpdf实现生成PDF时如何实现添加图片,水印和文字等效果,感兴趣的小伙伴可以跟随小编一起学习一下2024-02-02SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解
SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发2022-10-10
最新评论