JavaVue-Get请求 数组参数(qs格式化前端数据)

news2025/1/6 4:19:08

前言

  • 现在管理系统,像若依,表格查询一般会用Get请求,把页面的查询条件传递给后台。其中大部分页面会有日期时间范围查询
  • 这时候,为了解决请求参数中的数组文件,前台就会在请求前拦截参数中的日期数组数据,然后转为beginXxx/endXxx,两个属性来传递给后台
  • 这么做非常麻烦,前台要拦截,后台还要创建两个字段接收,并且分别获取,非常的别扭
  • 其实前台传输组,后台的对象中,使用数组也能正常接收,不过是前台的Get请求传递的参数格式不正确而已
  • 下面,我们将使用qs - npm库,来将传递给后台的数据序列化一下,传递给后台。更多转换规则,请查阅文档配置

前台代码

qs格式化前

<template>
  <div class="pageHome">
    <el-form :model="searchForm" label-width="120px" inline>
      <el-form-item label="姓名">
        <el-input v-model="searchForm.name" clearable></el-input>
      </el-form-item>

      <el-form-item label="出生年月">
        <el-date-picker
          v-model="searchForm.birthday"
          type="daterange"
          value-format="yyyy-MM-dd"
          range-separator=""
          start-placeholder="开始日期"
          end-placeholder="结束日期"
        ></el-date-picker>
      </el-form-item>

      <el-form-item>
        <el-button type="primary" @click="loadData">查询</el-button>
      </el-form-item>
    </el-form>

    <el-table :data="tableData" border style="width: 50%" border>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="age" label="年龄"></el-table-column>
      <el-table-column
        prop="birthday"
        label="出生年月"
        value-format="yyyy-MM-dd"
        width="180"
      ></el-table-column>
    </el-table>
  </div>
</template>
<script>
import qs from "qs";
export default {
  data() {
    return {
      searchForm: {
        name: undefined,
        birthday: [],
      },

      tableData: [],
    };
  },
  methods: {
    // 加载表格数据
    loadData() {
      this.$axios
        .get("http://localhost:8888/getUser", { params: this.searchForm })
        .then((res) => {
          this.tableData = res.data;
        });
    },
  },
};
</script>
<style lang="scss" scoped>
.pageHome {
  width: 100%;
  height: 95vh;
}
</style>

在这里插入图片描述

qs格式化后

<template>
  <div class="pageHome">
    <el-form :model="searchForm" label-width="120px" inline>
      <el-form-item label="姓名">
        <el-input v-model="searchForm.name" clearable></el-input>
      </el-form-item>

      <el-form-item label="出生年月">
        <el-date-picker
          v-model="searchForm.birthday"
          type="daterange"
          value-format="yyyy-MM-dd"
          range-separator=""
          start-placeholder="开始日期"
          end-placeholder="结束日期"
        ></el-date-picker>
      </el-form-item>

      <el-form-item>
        <el-button type="primary" @click="loadData">查询</el-button>
      </el-form-item>
    </el-form>

    <el-table :data="tableData" border style="width: 50%" border>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="age" label="年龄"></el-table-column>
      <el-table-column
        prop="birthday"
        label="出生年月"
        value-format="yyyy-MM-dd"
        width="180"
      ></el-table-column>
    </el-table>
  </div>
</template>
<script>
import qs from "qs";
export default {
  data() {
    return {
      searchForm: {
        name: undefined,
        birthday: [],
      },

      tableData: [],
    };
  },
  methods: {
    // 加载表格数据
    loadData() {
      let url = "http://localhost:8888/getUser";
      const params = qs.stringify(this.searchForm);
      if (params) {
        url = url + "?" + params;
      }
      this.$axios.get(url, {}).then((res) => {
        this.tableData = res.data;
      });
    },
  },
};
</script>
<style lang="scss" scoped>
.pageHome {
  width: 100%;
  height: 95vh;
}
</style>

在这里插入图片描述

在这里插入图片描述

后台代码

接口

@GetMapping("getUser")
public List<User> getUser(UserReqVO user) {
    List<User> users = Arrays.asList(
            new User("张三", 18, DateUtils.addDays(new Date(), -2)),
            new User("王五", 18, DateUtils.addDays(new Date(), -5)),
            new User("李四", 18, DateUtils.addDays(new Date(), -9)),
            new User("赵六", 18, new Date())
    );

    if (StringUtils.hasLength(user.getName())) {
        users = users.stream().filter(user1 -> user1.getName().contains(user.getName())).collect(Collectors.toList());
    }

    if (ArrayUtils.isNotEmpty(user.getBirthday())) {
        users = users.stream().filter(user1 -> user1.getBirthday().after(user.getBirthday()[0]) && user1.getBirthday().before(user.getBirthday()[1])).collect(Collectors.toList());
    }

    return users;
}

接收VO类

  • 注意,这里要加上@DateTimeFormat注解,才可以正确的把前台传过来的字符串日期->Date[]类型
package com.tcc.vo;

import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

@Data
public class UserReqVO {
    private String name;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date[] birthday;
}

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

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

相关文章

.e01, ..., .e0n的分卷压缩包怎么解压

用BandiZip&#xff0c;这些分卷压缩中还有一个.exe的文件&#xff0c;这个不是可执行文件&#xff0c;是一个解压缩的开头。 安装好bandiZip后&#xff0c;右键这个.exe文件 点击打开就是开始解压了&#xff1a; 最后解压后是这些。然后一个个再次解压.

库伦值自动化功耗测试工具

1. 功能介绍 PlatformPower工具可以自动化测试不同场景的功耗电流&#xff0c;并可导出为excel文件便于测试结果分析查看。测试同时便于后续根据需求拓展其他自动化测试用例。 主要原理&#xff1a;基于文件节点 coulomb_count 实现&#xff0c;计算公式&#xff1a;电流&…

大模型 LangChain 开发框架:Runable 与 LCEL 初探

大模型 LangChain 开发框架&#xff1a;Runable 与 LCEL 初探 一、引言 在大模型开发领域&#xff0c;LangChain 作为一款强大的开发框架&#xff0c;为开发者提供了丰富的工具和功能。其中&#xff0c;Runnable 接口和 LangChain 表达式语言&#xff08;LCEL&#xff09;是构…

【Jboss/Windows】Tomcat 8 + JDK 8 升级为 Jboss eap 7 + JDK8

文章目录 下载Jboss eap 7安装包执行standalone.bat修改jdk8不兼容的一些内存空间参数查看端口是否被占用解决端口占用环境变量配置修改项目中的pom文件配置Jboos启动项本地localhost启动测试 更多相关内容可查看 下载Jboss eap 7安装包 Jboss EAP&#xff1a;JBoss Enterpris…

aardio —— 改变按钮文本颜色

import win.ui; /*DSG{{*/ var winform win.form(text"改变按钮颜色示例";right279;bottom239;composited1) winform.add( button{cls"button";text"点这里1";left16;top104;right261;bottom159;fontLOGFONT(h-14);z1}; button2{cls"butto…

Elasticsearch操作笔记版

文章目录 1.ES索引库操作(CRUD)1.mapping常见属性(前提)2.创建索引库3.查询&#xff0c;删除索引库4.修改索引库 2.ES文档操作(CRUD)1.新增文档2.查询、删除文档查询返回的数据解读&#xff1a; 3.修改文档 3.RestClient操作(索引库/文档)(CRUD)1.什么是RestClient2.需要考虑前…

【狂热算法篇】解锁数据潜能:探秘前沿 LIS 算法

嘿&#xff0c;各位编程爱好者们&#xff01;今天带来的 LIS 算法简直太赞啦 无论你是刚入门的小白&#xff0c;还是经验丰富的大神&#xff0c;都能从这里找到算法的奇妙之处哦&#xff01;这里不仅有清晰易懂的 C 代码实现&#xff0c;还有超详细的算法讲解&#xff0c;让你轻…

【漫话机器学习系列】033.决策树回归(Decision Tree Regression)

决策树回归&#xff08;Decision Tree Regression&#xff09; 决策树回归是一种基于树状结构进行回归分析的监督学习方法。它将输入空间递归地划分为多个区域&#xff0c;并在每个区域内拟合一个简单的常数值&#xff0c;从而对目标变量进行预测。 决策树回归的原理 树的构建…

Vue3中使用 Vue Flow 流程图方法

效果图&#xff1a; 最近项目开发时有一个流程图的功能&#xff0c;需要做流程节点的展示&#xff0c;就搜到了 Vue Flow 这个插件&#xff0c;这个插件总得来说还可以&#xff0c;简单已使用&#xff0c;下边就总结一下使用的方法&#xff1a; Vue Flow官网&#xff1a;https…

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具)

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具) 核心代码完整代码在线示例地球中展示视频可以通过替换纹理的方式实现,但是随着摄像头和无人机的流行,需要视频和场景深度融合,简单的实现方式则不能满足需求。 三维视频融合技术将视频资源与三维…

Appllo学习

补充学习: Apollo管理多环境下的配置和踩坑实践 - 简书 Apollo-阿波罗配置中心超详细教程_apllo-CSDN博客 springboot本地local配置覆盖远程Apollo配置&#xff08;含Apollo配置加载顺序说明&#xff09;_本地覆盖apollo配置-CSDN博客 Apollo 配置中心详细教程 - 简书 (包含…

React18路由和Vue3路由进行对比

本文将深入比较 React 18 和 Vue 3 路由的不同之处&#xff0c;帮助你更好地理解如何在这两个框架中进行路由管理。希望能对于从 Vue 3 迁移到 React 的开发者&#xff0c;理解这些差异&#xff0c;帮助你更高效地切换框架和构建应用。 1. 路由配置 React 18 的路由配置 Rea…

Windows系统下载、部署Node.js与npm环境的方法

本文介绍在Windows电脑中&#xff0c;下载、安装并配置Node.js环境与npm包管理工具的方法。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;其允许开发者使用JavaScript编写命令行工具和服务器端脚本。而npm&#xff08;Node Package Manager&#xff09;则…

浏览器选中文字样式

效果 学习 Chrome: 支持 ::selection。Firefox: 支持 :-moz-selection 和 ::selection。Safari: 支持 ::selection。Internet Explorer: 支持 :-ms-selection。Microsoft Edge: 支持 ::-ms-selection 和 ::selection。 代码 <!DOCTYPE html> <html lang"en&qu…

指代消解:自然语言处理中的核心任务与技术进展

目录 前言1. 指代消解的基本概念与分类1.1 回指与共指 2. 指代消解的技术方法2.1 端到端指代消解2.2 高阶推理模型2.3 基于BERT的模型 3. 事件共指消解&#xff1a;跨文档的挑战与进展3.1 联合模型3.2 语义嵌入模型&#xff08;EPASE&#xff09; 4. 应用场景与前景展望4.1 关键…

CDPHudi实战-集成spark

[一]使用Spark-shell 1-配置hudi Jar包 [rootcdp73-1 ~]# for i in $(seq 1 6); do scp /opt/software/hudi-1.0.0/packaging/hudi-spark-bundle/target/hudi-spark3.4-bundle_2.12-1.0.0.jar cdp73-$i:/opt/cloudera/parcels/CDH/lib/spark3/jars/; done hudi-spark3.4-bu…

leetcode:面试题 17.01. 不用加号的加法(python3解法)

难度&#xff1a;简单 设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2 提示&#xff1a; a, b 均可能是负数或 0结果不会溢出 32 位整数 题解&#xff1a; class Solution:def add(self, a: int, b: int) -> int:sum_list [a…

设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口&#xff0c;从而使原本因接口不兼容而无法一起工作的类能够协同工作。这种设计模式在软件开发中非常有用&#xff0c;尤其是在需要集成…

二维码文件在线管理系统-收费版

需求背景 如果大家想要在网上管理自己的文件&#xff0c;而且需要生成二维码&#xff0c;下面推荐【草料二维码】&#xff0c;这个系统很好。特别适合那些制造业&#xff0c;实体业的使用手册&#xff0c;你可以生成一个二维码&#xff0c;贴在设备上&#xff0c;然后这个二维码…

MySQL8安装与卸载

1.下载mysql MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 2.解压mysql安装包 解压到自己定义的目录&#xff0c;这里解压就是安装&#xff0c;解压后的路径不要有空格和中文。 3.配置环境变量 配置环境变量可以方便电脑在任何的路径…