Java Web —— 第五天(请求响应1)
postman
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
作用:常用于进行接口测试
简单参数
原始方式
在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获
http://localhost:8080/simpleParam?name=Tom&age=10
SpringBoot方式
简单参数:参数名与形参变量名相同,定义形参即可接收参数
1.编写代码
@RequestMapping("/simpleParam")public String simpleParam(String name,Integer age){System.out.println(name + ":" + age);return "ok";} 
2. 启动程序
3.打开postman工具,点击发送,显示ok
http://localhost:8080/simpleParam?name=Tom&age=18 

4.返回控制台查看
 
如果是POST方式 无需修改Java代码

其余步骤一样
简单参数:如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成映射。
    //简单参数@RequestMapping("/simpleParam")public String simpleParam(@RequestParam(name="name") String username, Integer age){System.out.println(username + ":" + age);return "ok";} 
 
注意事项
@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。
如果该参数是可选的,可以将required属性设置为false。
1.原始方式获取请求参数
Controller方法形参中声明HttpServletRequest对象
调用对象的getParameter(参数名)
2.SpringBoot中接收简单参数
请求参数名与方法形参变量名相同
会自动进行类型转换
3.@RequestParam注解
方法形参名称与请求参数名称不匹配,通过该注解完成映射
该注解的required属性默认是true,代表请求参数必须传递
实体参数
简单实体对象
请求参数名与形参对象属性名相同,定义POJO接收即可
1.定义User类
public class User {private String name;private Integer age;@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}
 
2.在controller中编写请求代码
//实体参数@RequestMapping("/simplePojo")public String simplePojo(User user){System.out.println(user);return "OK";} 
3.点开postman工具
http://localhost:8080/simplePojo?name=ITCAST&age=10 

4.返回idea控制台显示

复杂实体对象
请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POIO属性
参数
1.定义Address类
package com.example.springboot01.pojo;/*** @author hyk~*/
public class Address {private String province;private String city;@Overridepublic String toString() {return "Address{" +"province='" + province + '\'' +", city='" + city + '\'' +'}';}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}
}
 
2.在User类中添加新的属性
package com.example.springboot01.pojo;/*** @author hyk~*/
public class User {private String name;private Integer age;private Address address;@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", address=" + address +'}';}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}
 
3.编写请求方法
 //复杂实体对象@RequestMapping("/complexPojo")public String complexPojo(User user){System.out.println(user);return "ok";} 
4.运行 并在postman中发送
http://localhost:8080/complexPojo?name=ITCAST&age=20&address.province=湖南&address.city=长沙 

5.控制台输出

实体对象参数
规则: 请求参数名与形参对象属性名相同,即可直接通过POJO接收
数组集合参数
数组参数
请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
 //数组集合参数@RequestMapping("/arrayParam")public String arrayParam(String hobby[]){System.out.println(Arrays.toString(hobby));return "ok";} 
http://localhost:8080/arrayParam?hobby=game&hobby=java&hobby=sing 

 
集合参数
请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系
 //集合参数@RequestMapping("/listParam")public String listParam(@RequestParam  List<String> hobby){System.out.println(hobby);return "ok";} 
http://localhost:8080/listParam?hobby=game&hobby=java&hobby=sing 


小结
数组集合参数
数组: 请求参数名与形参中数组变量名相同,可以直接使用数组封装
集合:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系
日期参数
日期参数:使用 @DateTimeFormat 注解完成日期参数格式转换
//日期参数@RequestMapping("/dateParam")public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime){System.out.println(updateTime);return "ok";} 
 
http://localhost:8080/dateParam?updateTime=2024-12-12 10:00:05 


JSON参数
JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 @RequestBody 标识

1.编写请求方法
 //JSON参数@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user){System.out.println(user);return "ok";} 
2.在postman中点击发送
http://localhost:8080/jsonParam 

-  
URL:请求的URL是
http://localhost:8080/jsonParam,这表明请求是发送到本地服务器上的/jsonParam路径。 -  
请求方法:使用的是POST方法,这意味着请求的主要目的是向服务器发送数据。
 -  
Body部分:
- Body类型:选择了
raw,表示你要发送的是原始数据。 - 数据格式:选择了
JSON,这表示你发送的数据格式是JSON。 
 - Body类型:选择了
 -  
发送的数据:
- JSON对象包含三个键值对: 
"name": "ITCAST":表示名称为ITCAST。"age": 16:表示年龄为16。"address":是一个嵌套的JSON对象,包含两个键值对:"province": "北京":表示省份为北京。"city": "北京":表示城市为北京。
 
 - JSON对象包含三个键值对: 
 -  
响应:
- 请求成功发送,并且服务器返回了
200 OK的状态码,表示请求成功。 - 返回的内容是一个字符串 
"ok"。 
 - 请求成功发送,并且服务器返回了
 
这个操作是在通过Postman向一个本地服务器的接口发送一个JSON格式的请求数据,并成功得到了服务器的响应。
编写json代码
{"name":"ITCAST","age":16,"address":{"province":"北京","city":"北京"}
} 
3.运行

路径参数
通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用 @PathVariable 获取路径参数
  //路径参数@RequestMapping("/path/{id}")public String pathParam(@PathVariable Integer id){System.out.println(id);return "ok";} 




获取多个路径参数
  @RequestMapping("/path/{id}/{name}")public String pathParam(@PathVariable Integer id,@PathVariable String name){System.out.println(id+":"+name);return "ok";} 
http://localhost:8080/path/200/Tom 

总结
1.简单参数
定义方法形参,请求参数名与形参变量名一致
如果不一致,通过@RequestParam手动映射
2.实体参数
请求参数名,与实体对象的属性名一致,会自动接收封装
3.数组集合参数
数组: 请求参数名与数组名一致,直接封装
集合: 请求参数名与集合名一致,@RequestParam绑定关系
4.日期参数
@DateTimeFormat
5.JSON参数
@RequestBody
6.路径参数
@PathVariable
相关文章:
Java Web —— 第五天(请求响应1)
postman Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 作用:常用于进行接口测试 简单参数 原始方式 在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获 http://localhost:8080/simpleParam?nameTom&a…...
【LLMOps】手摸手教你把 Dify 接入微信生态
作者:韩方圆 "Dify on WeChat"开源项目作者 概述 微信作为最热门即时通信软件,拥有巨大的流量。 微信友好的聊天窗口是天然的AI应用LUI(Language User Interface)/CUI(Conversation User Interface)。 微信不仅有个人微信,同时提供…...
Ftrans文件摆渡方案:重塑文件传输与管控的科技先锋
一、哪些行业会用到文件摆渡相关方案 文件摆渡相关的产品和方案通常用于需要在不同的网络、安全域、网段之间传输数据的场景,主要是一些有核心数据需要保护的行业,做了网络隔离和划分。以下是一些应用比较普遍的行业: 金融行业:…...
LaTeX中的除号表示方法详解
/除号 LaTeX中的除号表示方法详解1. 使用斜杠 / 表示除号优点缺点 2. 使用 \frac{} 表示分数形式的除法优点缺点 3. 使用 \div 表示标准除号优点缺点 4. 使用 \over 表示分数形式的除法优点缺点 5. 使用 \dfrac{} 和 \tfrac{} 表示大型和小型分数优点缺点 总结 LaTeX中的除号表…...
DID、DID文档、VC、VP分别是什么 有什么关系
DID(去中心化身份) 定义:DID 是一种去中心化的唯一标识符,用于表示个体、组织或设备的身份。DID 不依赖于中央管理机构,而是由去中心化网络(如区块链)生成和管理。 用途:DID 允许用…...
网络安全应急响应
前言\n在网络安全领域,有一句广为人知的话:“没有绝对的安全”。这意味着任何系统都有可能被攻破。安全攻击的发生并不可怕,可怕的是从头到尾都毫无察觉。当系统遭遇攻击时,企业的安全人员需要立即进行应急响应,以将影…...
Qt数据和视图分离——中MCV和MVVM
智能指针 一、背景知识二、命令式编程 vs 声明式编程2.1 命令式编程(Imperative Programming)2.2 声明式编程(Declarative Programming) 三、 MVC(Model-View-Controller)3.1 模型(Model)3.2 视图ÿ…...
重定义变量类型:如#define FLOAT float和typedef float FLOAT的区别
在 C 或 C 中, #define 和 typedef 都可以用来为类型或值创建别名,但它们之间存在一些关键的区别: 预处理指令 ( #define ): #define 是预处理器指令,用于定义宏。 当编译器处理源代码时,预处理器会先运行&#…...
Qt 使用阿里矢量图标库
前言 阿里矢量图标库非常好用,里面有各种丰富的图标,完全免费,还支持自定义图标,还可以将图标打包到一个项目中,使用起来非常方便。 第一步: 打开阿里矢量图标库 第二步: 搜索图标&#x…...
仓颉语言运行时轻量化实践
杨勇勇 华为语言虚拟机实验室架构师,目前负责仓颉语言静态后端的开发工作 仓颉语言运行时轻量化实践 仓颉Native后端(CJNative)是仓颉语言的高性能、轻量化实现。这里的“轻量化”意指仓颉程序运行过程中占用系统资源(内存、CPU等…...
深入理解Python中的subprocess模块
目录 subprocess模块简介常用函数执行外部命令管道通信子进程管理错误处理实际应用示例最佳实践 subprocess模块简介 subprocess模块是Python标准库的一部分,提供了一个跨平台的方法来生成新进程、连接其输入/输出/错误管道,并获取其返回码。该模块旨…...
从零开始搭建 EMQX 集群压测框架
从零开始搭建 EMQX 集群压测框架 架构 在设计以EMQX为中心的MQTT消息队列集群压力测试框架时,我们采用微服务架构模式。EMQX作为消息队列的核心,负责处理MQTT协议的消息发布和订阅。Nginx作为EMQX的反向代理,负责负载均衡和SSL/TLS终端。MQT…...
ArkUI基本介绍
ArkUI:提供HarmonyOS应用UI开发框架,几件开发、精致体验、跨设备/跨平台。 ArkUI(方舟UI框架)为应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件ÿ…...
vue2+OpenLayers 天地图上打点并且显示相关的信息(2)
上次是在地图上打点 这次鼠标移动在图标上面显示相关的信息 首先有两个事件 鼠标移入 和 鼠标移出事件 pointermove pointerout 鼠标放上去之前 放上去后 代码如下 <template><div class"container"><div id"vue-openlayers" class&quo…...
c++继承(二)
一、友元函数的继承 友元函数不能被继承,就像爸爸的朋友不是你的朋友,如果要有友元函数,在子类重新定义一个。 二、静态成员的继承 静态成员的继承仍然是那个成员,普通成员的继承是不同的。 父类的静态成员属于当前类…...
低代码开发的崛起:机遇与挑战
近年来,“低代码”开发平台的迅速崛起,已经成为IT行业中不可忽视的趋势。这些平台承诺让非专业人士也能快速构建应用程序,通过减少代码编写的需求,大幅提高开发效率。对于许多企业而言,低代码开发工具成为了一个加速数…...
Json-JacksonUtils工具类
为了创建一个通用的 Jackson 工具类,我们可以定义一个名为 JacksonUtils 的工具类,该类将提 供多种方法来支持不同类型的 JSON 转换需求。下面是一个示例实现,包括基本的 JSON 到 Java 对象的转换、Java 对象到 JSON 的转换、以及更复杂的类型如 CommonResult 的转换。 C…...
svn客户端装完后没有svn.exe
如果SVN客户端(如TortoiseSVN)安装完成后,在预期的安装目录(通常是bin目录)中没有找到svn.exe文件,这通常是因为在安装过程中没有选择安装命令行客户端工具(Command Line Client Toolsÿ…...
TinyWebserver的复现与改进(4):主线程的具体实现
GitHub - yzfzzz/MyWebServer: Linux高并发服务器项目,参考了TinyWebServer,将在此基础上进行性能改进与功能增加。为方便读者学习,附带详细注释和博客! TinyWebserver的复现与改进(1):服务器环…...
DaemonSet 不能帮助我们做什么事情?
DaemonSet 不能帮助我们做什么事情? A. 保证集群内每一个(或者一些)节点都运行一组相同的Pod B. 跟踪集群节点状态,保证新加入的节点自动创建对应的Pod C. 跟踪集群节点状态,保证移除的节点删除对应的Pod D. 能够设置Pod重试次数,…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
