当前位置: 首页 > news >正文

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

  1. URL:请求的URL是 http://localhost:8080/jsonParam,这表明请求是发送到本地服务器上的/jsonParam路径。

  2. 请求方法:使用的是POST方法,这意味着请求的主要目的是向服务器发送数据。

  3. Body部分

    • Body类型:选择了raw,表示你要发送的是原始数据。
    • 数据格式:选择了JSON,这表示你发送的数据格式是JSON。
  4. 发送的数据

    • JSON对象包含三个键值对:
      • "name": "ITCAST":表示名称为ITCAST
      • "age": 16:表示年龄为16。
      • "address":是一个嵌套的JSON对象,包含两个键值对:
        • "province": "北京":表示省份为北京。
        • "city": "北京":表示城市为北京。
  5. 响应

    • 请求成功发送,并且服务器返回了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程序中&#xff0c;获取请求参数&#xff0c;需要通过HttpServletRequest 对象手动获 http://localhost:8080/simpleParam?nameTom&a…...

【LLMOps】手摸手教你把 Dify 接入微信生态

作者&#xff1a;韩方圆 "Dify on WeChat"开源项目作者 概述 微信作为最热门即时通信软件&#xff0c;拥有巨大的流量。 微信友好的聊天窗口是天然的AI应用LUI(Language User Interface)/CUI(Conversation User Interface)。 微信不仅有个人微信&#xff0c;同时提供…...

Ftrans文件摆渡方案:重塑文件传输与管控的科技先锋

一、哪些行业会用到文件摆渡相关方案 文件摆渡相关的产品和方案通常用于需要在不同的网络、安全域、网段之间传输数据的场景&#xff0c;主要是一些有核心数据需要保护的行业&#xff0c;做了网络隔离和划分。以下是一些应用比较普遍的行业&#xff1a; 金融行业&#xff1a;…...

LaTeX中的除号表示方法详解

/除号 LaTeX中的除号表示方法详解1. 使用斜杠 / 表示除号优点缺点 2. 使用 \frac{} 表示分数形式的除法优点缺点 3. 使用 \div 表示标准除号优点缺点 4. 使用 \over 表示分数形式的除法优点缺点 5. 使用 \dfrac{} 和 \tfrac{} 表示大型和小型分数优点缺点 总结 LaTeX中的除号表…...

DID、DID文档、VC、VP分别是什么 有什么关系

DID&#xff08;去中心化身份&#xff09; 定义&#xff1a;DID 是一种去中心化的唯一标识符&#xff0c;用于表示个体、组织或设备的身份。DID 不依赖于中央管理机构&#xff0c;而是由去中心化网络&#xff08;如区块链&#xff09;生成和管理。 用途&#xff1a;DID 允许用…...

网络安全应急响应

前言\n在网络安全领域&#xff0c;有一句广为人知的话&#xff1a;“没有绝对的安全”。这意味着任何系统都有可能被攻破。安全攻击的发生并不可怕&#xff0c;可怕的是从头到尾都毫无察觉。当系统遭遇攻击时&#xff0c;企业的安全人员需要立即进行应急响应&#xff0c;以将影…...

Qt数据和视图分离——中MCV和MVVM

智能指针 一、背景知识二、命令式编程 vs 声明式编程2.1 命令式编程&#xff08;Imperative Programming&#xff09;2.2 声明式编程&#xff08;Declarative Programming&#xff09; 三、 MVC(Model-View-Controller)3.1 模型&#xff08;Model&#xff09;3.2 视图&#xff…...

重定义变量类型:如#define FLOAT float和typedef float FLOAT的区别

在 C 或 C 中&#xff0c; #define 和 typedef 都可以用来为类型或值创建别名&#xff0c;但它们之间存在一些关键的区别&#xff1a; 预处理指令 ( #define ): #define 是预处理器指令&#xff0c;用于定义宏。 当编译器处理源代码时&#xff0c;预处理器会先运行&#…...

Qt 使用阿里矢量图标库

前言 阿里矢量图标库非常好用&#xff0c;里面有各种丰富的图标&#xff0c;完全免费&#xff0c;还支持自定义图标&#xff0c;还可以将图标打包到一个项目中&#xff0c;使用起来非常方便。 第一步&#xff1a; 打开阿里矢量图标库 第二步&#xff1a; 搜索图标&#x…...

仓颉语言运行时轻量化实践

杨勇勇 华为语言虚拟机实验室架构师&#xff0c;目前负责仓颉语言静态后端的开发工作 仓颉语言运行时轻量化实践 仓颉Native后端&#xff08;CJNative&#xff09;是仓颉语言的高性能、轻量化实现。这里的“轻量化”意指仓颉程序运行过程中占用系统资源&#xff08;内存、CPU等…...

深入理解Python中的subprocess模块

目录 subprocess模块简介常用函数执行外部命令管道通信子进程管理错误处理实际应用示例最佳实践 subprocess模块简介 subprocess模块是Python标准库的一部分&#xff0c;提供了一个跨平台的方法来生成新进程、连接其输入/输出/错误管道&#xff0c;并获取其返回码。该模块旨…...

从零开始搭建 EMQX 集群压测框架

从零开始搭建 EMQX 集群压测框架 架构 在设计以EMQX为中心的MQTT消息队列集群压力测试框架时&#xff0c;我们采用微服务架构模式。EMQX作为消息队列的核心&#xff0c;负责处理MQTT协议的消息发布和订阅。Nginx作为EMQX的反向代理&#xff0c;负责负载均衡和SSL/TLS终端。MQT…...

ArkUI基本介绍

ArkUI&#xff1a;提供HarmonyOS应用UI开发框架&#xff0c;几件开发、精致体验、跨设备/跨平台。 ArkUI&#xff08;方舟UI框架&#xff09;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff…...

vue2+OpenLayers 天地图上打点并且显示相关的信息(2)

上次是在地图上打点 这次鼠标移动在图标上面显示相关的信息 首先有两个事件 鼠标移入 和 鼠标移出事件 pointermove pointerout 鼠标放上去之前 放上去后 代码如下 <template><div class"container"><div id"vue-openlayers" class&quo…...

c++继承(二)

一、友元函数的继承 友元函数不能被继承&#xff0c;就像爸爸的朋友不是你的朋友&#xff0c;如果要有友元函数&#xff0c;在子类重新定义一个。 二、静态成员的继承 静态成员的继承仍然是那个成员&#xff0c;普通成员的继承是不同的。 父类的静态成员属于当前类&#xf…...

低代码开发的崛起:机遇与挑战

近年来&#xff0c;“低代码”开发平台的迅速崛起&#xff0c;已经成为IT行业中不可忽视的趋势。这些平台承诺让非专业人士也能快速构建应用程序&#xff0c;通过减少代码编写的需求&#xff0c;大幅提高开发效率。对于许多企业而言&#xff0c;低代码开发工具成为了一个加速数…...

Json-JacksonUtils工具类

为了创建一个通用的 Jackson 工具类,我们可以定义一个名为 JacksonUtils 的工具类,该类将提 供多种方法来支持不同类型的 JSON 转换需求。下面是一个示例实现,包括基本的 JSON 到 Java 对象的转换、Java 对象到 JSON 的转换、以及更复杂的类型如 CommonResult 的转换。 C…...

svn客户端装完后没有svn.exe

如果SVN客户端&#xff08;如TortoiseSVN&#xff09;安装完成后&#xff0c;在预期的安装目录&#xff08;通常是bin目录&#xff09;中没有找到svn.exe文件&#xff0c;这通常是因为在安装过程中没有选择安装命令行客户端工具&#xff08;Command Line Client Tools&#xff…...

TinyWebserver的复现与改进(4):主线程的具体实现

GitHub - yzfzzz/MyWebServer: Linux高并发服务器项目&#xff0c;参考了TinyWebServer&#xff0c;将在此基础上进行性能改进与功能增加。为方便读者学习&#xff0c;附带详细注释和博客&#xff01; TinyWebserver的复现与改进&#xff08;1&#xff09;&#xff1a;服务器环…...

DaemonSet 不能帮助我们做什么事情?

DaemonSet 不能帮助我们做什么事情&#xff1f; A. 保证集群内每一个(或者一些)节点都运行一组相同的Pod B. 跟踪集群节点状态&#xff0c;保证新加入的节点自动创建对应的Pod C. 跟踪集群节点状态&#xff0c;保证移除的节点删除对应的Pod D. 能够设置Pod重试次数&#xff0c;…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...