前端传递参数,后端如何接收

news2024/9/21 18:36:37

目录

简单参数

传递方式

获取方式一

获取方式二

相关注解

实体参数

数组集合参数

传递方式

相关注解

获取方式一

获取方式二

日期参数

传递方式

相关注解

获取方式

json参数

传递方式

相关注解

获取方式

路径参数

传递方式

相关注解

获取方式

传递多个


简单参数

传递方式

简单参数携带在请求的URL中,例如:

http://localhost:8080/test?page=1&pageSize=10

简单参数放在请求路径的后面,以?连接,以&分隔。

获取方式一

通过HttpServletRequest对象获取

例如:

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(HttpServletRequest request) {
        Integer page = request.getParameter("page");
        Integer pageSize = request.getParameter("pageSize");
        return "page=" + page + "\n" +"pageSize=" + pageSize;
    }
}

测试结果:

当然我们在接收简单参数的时候不会这么做,是比较繁琐的。

获取方式二

我们使用获取方式二来接收简单参数,推荐做法。

例如:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(Integer page, Integer pageSize) {
        return "page=" + page + "\n" +"pageSize=" + pageSize;
    }
}

测试结果:

可以看到测试结果是一样的,但是方便了很多。

相关注解

@RequestParam

作用:参数名映射和判断参数是否必须

属性:name的值代表映射的参数名,required的值代表参数是否必须(默认必须,缺少会报错)

用法:用在接收参数上

例如:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(Integer page, @RequestParam(name = "pageSize", required = false) Integer size) {
        return "page=" + page + "\n" +"pageSize=" + size;
    }
}

 测试结果:

@RequestParam注解不经常用,因为传递的参数名和接收的参数名一般都是要保持一致的,如果有特殊需求的话再使用。

实体参数

实体参数可以看作是对简单参数的补充:

那如果简单参数有很多怎么办呢?一个一个地接收吗?

可以一个一个地接收,但是有更优雅的做法。

例如以下请求:

http://localhost:8080/test?gender=1&age=18&page=1&pageSize=10

直接接收参数的代码:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(Integer gender, Integer age, Integer page, Integer pageSize) {
        return "gender=" + gender + "\n" +
               "age=" + age + "\n" +
               "page=" + page + "\n" +
               "pageSize=" + pageSize;
    }
}

测试结果:

推荐做法是将所有的参数封装成对象,用封装的对象去接收。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@Data
@NoArgsConstructor
public class PageBean {
    private Integer gender;
    private Integer age;
    private Integer page;
    private Integer pageSize;
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(PageBean pageSize) {
        return pageSize.toString();
    }
}

测试结果:

需要注意的是这里并没有用到@RequestBody注解,该注解是在接收json格式的数据时,用在实体参数上解析数据用的。

数组集合参数

传递方式

和简单参数一样,数组集合参数携带在请求路径的后面。但是数组集合参数的名称都是一样的,通过定义数组或者集合参数来接收。例如:

http://localhost:8080/test?id=1&id=2&id=3

相关注解

@RequestParam

用法:用在集合参数上,数组参数不需要。

获取方式一

定义数组参数来接收,注意参数名保持一致。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(Integer[] id) {
        return Arrays.toString(id);
    }
}

测试结果:

获取方式二

定义集合参数来接收,注意参数名保持一致。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(@RequestParam List<Integer> id) {
        return id.toString();
    }
}

测试结果:

通常是使用集合来接收,因为集合操作起来更方便。 

日期参数

传递方式

通过请求路径传递,例如:

http://localhost:8080/test?time=2023-12-16 09:30:45

相关注解

@DateTimeFormat

作用:完成日期格式转换

属性:pattern的值用来指定日期格式

用法:用在LocalDateTime类型的参数上

获取方式

LocalDateTime类型的参数来接收

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

@RestController
public class DemoController {

    @GetMapping("/test")
    public String demo(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {
        return time.toString();
    }
}

测试结果:

json参数

传递方式

携带在请求体中

json格式的数据:

{
    "username":"艾伦",
    "password":"123abc"
}

相关注解

@RequestBody

作用:解析json格式的数据

用法:用在实体参数上

获取方式

先封装实体类,用于接收参数。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@Data
@NoArgsConstructor
public class UserLogin {
    private String username;
    private String password;
}
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @PostMapping("/test")
    public String demo(@RequestBody UserLogin userLogin) {
        return userLogin.toString();
    }
}

测试结果: 

路径参数

传递方式

通过请求路径传递,例如:

http://localhost:8080/test/1

和直接携带在请求路径上不同,路径参数是作为请求路径的一部分。

相关注解

@PathVariable

作用:获取路径参数

用法:用在接收参数上

获取方式

注意接收请求路径的写法,路径参数必须写在请求路径中,用{...}表示并标明参数名。例如:

@GetMapping("/test/{id}")

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/test/{id}")
    public String demo(@PathVariable Integer id) {
        return "id=" + id;
    }
}

测试结果:

传递多个

路径参数可以同时传递多个,以逗号分隔,用集合接收。例如:

http://localhost:8080/test/1,2,3

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class DemoController {

    @GetMapping("/test/{ids}")
    public String demo(@PathVariable List<Integer> ids) {
        return ids.toString();
    }
}

测试结果:

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

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

相关文章

【Java系列】详解多线程(三)—— 线程安全(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一…

心理测试网站源码,知己心理React心理健康测试

源码介绍 React心理健康测试网站源码&#xff0c;帮助需要的人更好地了解自已的心理健康状态和人格特征。 React可以在Vite中启用HMR&#xff0c;并且包含了几人EsLint规则。只需要使用react antd-mobile即可 轻松部署完成。

【JAVA日志框架】JUL,JDK原生日志框架详解。

前言 Java日志体系混乱&#xff1f;Java日志框架系列&#xff0c;清晰简洁整理好整个Java的日志框架体系。第一篇&#xff0c;JDK原生日志框架——JUL。 目录 1.概述 2.日志级别 3.配置 4.继承关系 1.概述 日志框架的核心问题&#xff1a; 日志是用来记录应用的一些运行…

C++ Qt开发:Tab与Tree组件实现分页菜单

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍tabWidget选择夹组件与TreeWidget树形选择组件…

Swift 响应式编程:简化 KVO 观察与 UI 事件处理 | 开源日报 No.110

ReactiveX/RxSwift Stars: 23.8k License: MIT RxSwift 是 Reactive Extensions 标准的 Swift 特定实现&#xff0c;它提供了 Observable 接口来表达计算的通用抽象。该项目旨在为 Rx API 提供真正以 Swift 为先的 API&#xff0c;并允许轻松地组合异步操作和数据流。其主要功…

K8s投射数据卷

目录 一.Secret 1.secret介绍 2.secret的类型 3.创建secret 4.使用secret 环境变量的形式 volume数据卷挂载 二ConfigMap 1.创建ConfigMap的方式 2.使用ConfigMap 2.1作为volume挂载使用 2.2.作为环境变量 三.Downward API 1.以环境变量的方式实现 2.Volume挂载 一.S…

Linux 中使用 docker 安装 Elasticsearch 及 Kibana

Linux 中使用 docker 安装 Elasticsearch 及 Kibana 安装 Elasticsearch 和 Kibana安装分词插件 ik_smart 安装 Elasticsearch 和 Kibana 查看当前运行的镜像及本地已经下载的镜像&#xff0c;确认之前没有安装过 ES 和 Kibana 镜像 docker ps docker images从远程镜像仓库拉…

HarmonyOS后台代理提醒

后台代理提醒 简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业…

redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板

双写一致性 场景导入 如果现在有个数据要更新&#xff0c;是先删除缓存&#xff0c;还是先操作数据库呢&#xff1f;当多个线程同时进行访问数据的操作&#xff0c;又是什么情况呢&#xff1f; 以先删除缓存&#xff0c;再操作数据库为例 多个线程运行的正常的流程应该如下…

云原生之深入解析Kubernetes Operator的最佳实践和最常见的问题分析

一、Kubernetes Operator 简介 Kubernetes Operator 是通过连接主 API 并 watch 时间的一组进程&#xff0c;一般会 watch 有限的资源类型。当相关 watch 的 event 触发的时候&#xff0c;operator 做出响应并执行具体的动作。这可能仅限于与主 API 交互&#xff0c;但通常会涉…

HiveSql语法优化二 :join算法

Hive拥有多种join算法&#xff0c;包括Common Join&#xff0c;Map Join&#xff0c;Bucket Map Join&#xff0c;Sort Merge Buckt Map Join等&#xff0c;下面对每种join算法做简要说明&#xff1a; Common Join Common Join是Hive中最稳定的join算法&#xff0c;其通过一个M…

selenium+xpath爬取二手房标题

贝壳找房标题爬取需要注意的是&#xff0c;在页面中间有一个小广告 而他就在ul的li下面&#xff0c;当我们进行title所以输出时&#xff0c;会报错。 所以在进行页面解析之前必须把广告叉掉&#xff0c;不然也把广告那一部分的li给爬取下来了 所以&#xff0c;我们&#xff0…

听GPT 讲Rust源代码--src/tools(13)

File: rust/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incoherent_impl.rs 在Rust源代码中&#xff0c;路径为rust/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incoherent_impl.rs的文件是为了处理Rust代码中的不一致实现问题而存在的。…

微服务实战系列之ZooKeeper(中)

前言 昨日博主的第一篇ZooKeeper&#xff0c;对它自身具备的能力做了初步介绍。书接上文&#xff0c;马不停蹄&#xff0c;我们继续挖掘它内在的美&#xff0c;充分把握它的核心与脉络。 揭秘ZooKeeper Q&#xff1a;集群一致性协同是如何进行的 我们讲到分布式&#xff0c;…

【MySQL】启动 和 连接 MySQL

启动停止 mysql安装成功后在cmd输入 net start mysql80 //启动 net stop mysql80 //停止 mysql连接 方式1. 通过客户端去连接 方式2.使用cmd去连接 描述&#xff1a;-u是指定 用户 -p是指定密码 mysql -u root -p password

Github 2023-12-16开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-16统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目2非开发语言项目2TypeScript项目1Jupyter Notebook项目1Go项目1PHP项目1JavaScript项目1C#项目1 精…

重置BIOS设置的方法通常有两种,可以通过BIOS菜单,也可也通过CMOS

你的计算机将系统时间和硬件设置等低级设置存储在CMOS中。这些设置在BIOS或UEFI设置菜单中进行配置。如果你遇到硬件兼容性问题或其他问题,你可能需要尝试清除CMOS。 清除CMOS会将BIOS或UEFI设置重置回出厂默认状态。在大多数情况下,你可以从BIOS菜单或按下背面的CMOS按钮来…

基于ssm日用品网站设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本日用品网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

【MySQL】(DDL) 表操作-查询

查询&#xff1a; show tables ; //查询所有表名称 desc 表名称 ; //查询表结构 show create table 表名称; //查看创建表语句 create table 表名 ( 字段名1 字段类型1,字段名2 字段类型2) ; //创建表结构 示列&#xff1a; 1. show tables; use 数据库名; show tables …

时序预测 | Python实现LSTM电力需求预测

时序预测 | Python实现LSTM电力需求预测 目录 时序预测 | Python实现LSTM电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用…