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

目录

简单参数

传递方式

获取方式一

获取方式二

相关注解

实体参数

数组集合参数

传递方式

相关注解

获取方式一

获取方式二

日期参数

传递方式

相关注解

获取方式

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.mzph.cn/news/227662.shtml

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

相关文章

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

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

[论文笔记] chatgpt系列 SparseMOE—GPT4的MOE结构

SparseMOE: 稀疏激活的MOE Swtich MOE,所有token要在K个专家网络中,选择一个专家网络。 显存增加。 Experts Choice:路由MOE:​​​​​​​ 由专家选择token。这样不同的专家都选择到某个token,也可以不选择该token。 由于FFN层的时间复杂度和attention层不同,FFN层的时…

[Verilog] Verilog 简介

主页&#xff1a; 元存储的博客 全文 2100 字。 文章目录 前言1. Verilog 简介2. 主要特性3. 应用领域总结 前言 Verilog HDL&#xff08;简称 Verilog &#xff09;是一种硬件描述语言&#xff0c;用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建…

杰理-音箱-flash配置

杰理-音箱-flash配置 注意配置io&#xff0c;双线或者4线的硬件连接方式&#xff0c;否则无法烧录UI资源

哈希扩展:位图与布隆过滤器

目录 1. 位图1.1 位图引入1.2 位图概念1.3 位图的模拟实现1.4 位图相关问题1.5 位图的应用 2. 布隆过滤器2.1 布隆过滤器概念2.2 模拟实现2.3 布隆过滤器相关问题2.3.1 哈希切分 1. 位图 1.1 位图引入 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&…

LabVIEW开发地铁运行安全监控系统

LabVIEW开发地铁运行安全监控系统 最近昌平线发生的故障事件引起了广泛关注&#xff0c;暴露了现有地铁运行监控系统在应对突发情况方面的不足。为了提高地铁系统的运行安全性&#xff0c;并防止类似事件再次发生&#xff0c;提出了一套全面的地铁运行安全监控系统方案。此方案…

MySQL数据库,变量、流程控制与游标

变量 系统变量 系统变量分为全局系统变量&#xff08;需要添加global关键字&#xff09;以及会话系统变量&#xff08;需要添加session关键字&#xff09;有时将全局系统变量简称为全局变量&#xff0c;将会话系统变量称为local变量。如果不写&#xff0c;默认会话级别。静态…

如何在页面中加入百度地图

官方文档&#xff1a;jspopularGL | 百度地图API SDK (baidu.com) 添加一下代码就可以实现 <!DOCTYPE html> <html> <head><meta name"viewport" content"initial-scale1.0, user-scalableno"/><meta http-equiv"Conten…

超分辨率重建——SAN训练自己数据集及推理测试(详细图文教程)

目录 一、源码包下载二、数据集准备三、预训练权重文件四、训练环境五、训练5.1 超参数修改5.2 训练模型5.2.1 命令方式训练5.2.2 Configuration配置参数方式训练 5.3 模型保存 六、推理测试6.1 超参数修改6.2 测试6.2.1 命令方式测试6.2.2 Configuration配置参数方式测试 6.3 …

响应者链概述

响应者链 iOS事件的3大类型 Touch Events(触摸事件)Motion Events(运动事件&#xff0c;比如重力感应和摇一摇等)Remote Events(远程事件&#xff0c;比如用耳机上得按键来控制手机) 触摸事件 处理触摸事件的两个步骤 寻找事件的最佳响应者事件的响应在响应链中的传递 寻…

Web UI 自动化 元素定位利器

序 元素定位&#xff0c;对于 Web UI 自动化而言&#xff0c;绝对是大家成长道路上的一道绊脚石。 很多初学者&#xff0c;都“死”在了元素定位上&#xff0c;从而失去了学习的兴趣。导致职业规划不得不半途而废~ 那么&#xff0c;今天&#xff0c;我们就使用 Katalon Stu…

深入理解CI/CD与Docker集成:自动化构建和部署的完整指南

在当今软件开发的快节奏环境中&#xff0c;自动化构建和部署是实现敏捷开发和DevOps实践的关键。Docker容器技术为这一过程引入了更高的灵活性和一致性。本文将深入研究如何将持续集成/持续部署&#xff08;CI/CD&#xff09;与Docker集成&#xff0c;提供更详细、实用的示例代…

向华为学习:基于BLM模型的战略规划研讨会实操的详细说明,含研讨表单(二)

上一篇文章&#xff0c;华研荟结合自己的经验和实践&#xff0c;详细介绍了基于BLM模型的战略规划研讨会的设计和组织流程&#xff0c;提高效率的做法。有朋友和我私信沟通说&#xff0c;其实这个流程不单单适合于BLM模型的战略规划研讨会&#xff0c;实际上&#xff0c;使用其…

v851s ssh搭建与使用

ssh 概述: 1. 用来远程登录的一种安全通道协议(常用于linux 、UNIX中); 2. 分为服务端和客户端: 1)服务端即openSSH ,一般属于目标开发板(linux中配置文件路径/etc/ssh/sshd_config); 2)客户端即登录端,常用工具:sercureCRT 、MobaXterm 、Putty等; 1. ssh 服务…

解锁数据探索新时代,JetBrains DataGrip 2023 Mac/win中文版下载

JetBrains DataGrip 2023 Mac/win&#xff0c;作为一款全新的数据库管理和开发工具&#xff0c;为数据工程师、分析师和开发人员提供了强大的功能和工具&#xff0c;帮助他们更高效地处理和分析数据。无论你是使用Mac还是Windows系统&#xff0c;都能够通过这款软件轻松驾驭数据…

springMVC 学习总结(四) 拦截器及统一异常处理

一.拦截器 1.拦截器与过滤器的区别 拦截器 Interceptor 和 过滤器 Filter类似&#xff0c;主要用于拦截用户请求并作出一定处理操作&#xff0c; 但两则也有不同之处&#xff0c;如过滤器只在Servlet前后起作用&#xff0c;是Servlet规范定义的&#xff0c;是Servlt容器才支…

CTF网络安全大赛是干什么的?发展史、赛制、赛程介绍,参赛需要学什么?

CTF&#xff08;Capture The Flag&#xff09;是一种网络安全竞赛&#xff0c;它模拟了各种信息安全场景&#xff0c;旨在提升参与者的网络安全技能。CTF 赛事通常包含多种类型的挑战&#xff0c;如密码学、逆向工程、网络攻防、Web 安全、二进制利用等。 发展史 CTF 的概念…

SpringBoot中处理处理国际化

SpringBoot中处理处理国际化 1. 创建SpringBoot项目2. resource下创建i18n目录3. 右键i18n新建资源包4. 弹框中添加需要支持的国际化语言5. messages.properties中添加需要国际化的键6. application.yaml添加配置7. 国际化工具8. 使用功能9 场景问题 1. 创建SpringBoot项目 2.…

spring 基于注解管理bean @Autowired

目录结构&#xff1a; 代码示例&#xff1a; UserContronller.java package com.atguigu.spring6.autowired.controller;import com.atguigu.spring6.autowired.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springfra…

阿里云对象存储OSS外网流出流量异常增多导致费用上升的解决方法

本文介绍在使用阿里云的对象存储 OSS服务过程中&#xff0c;外网流量消耗异常增多并导致异常的费用支出这一情况的问题发现、问题定位与几种不同的问题解决方法。 细细数来&#xff0c;写博客已经有近3的历史了&#xff0c;这成为了一项已经陪伴我大半人生的工作&#xff1b;也…