当前位置: 代码网 > it编程>编程语言>Java > SpringBoot后端接收参数优化代码示例(统一处理前端参数)

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

2024年07月25日 Java 我要评论
在使用 springboot+ mybatisplus 框架的项目,写了个后端统一处理前端post提交的json格式的查询参数类,赖得手工一个一个参数处理(把要查询的参数交给前端)。使用示例代码:

在使用 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后端接收参数优化内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com