这次来了解一下JavaWeb中请求响应相关的内容,本篇将带你快速了解JavaWeb中的请求响应以及Postman工具的使用!

一、请求响应

1、概述

体系结构图如下,

1.1 请求

请求(HttpServletRequest):获取请求数据

1.2 响应

响应(HttpServletResponse):设置响应数据

1.3 两种软件架构方式

1) BS架构
Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。

优点是维护起来较方便,但给用户的体验较一般。

注:一般来说用Java语言开发的应用程序都是基于 BS架构。

2)CS架构
Client/Server,客户端/服务器架构模式。需要单独安装客户端。

缺点是开发维护麻烦,但能给用户较好的体验。

2、Postman

2.1 概述

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。

作用:常用于进行接口测试

下载地址:https://www.postman.com/downloads/
关于Postman的下载,非常简单,不再赘述。

2.2 基本使用

首次使用,需要注册登录。登录进去如下图,首先点击 Workspaces创建工作空间 ->Create Workspace,输入名称,选择可见范围,点击创建即可,如下。


创建完成后,添加请求并测试。首先启动我们SpringBoot的入门程序,并成功在浏览器中访问。

对应的controller类如下

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.itweb.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 请求处理类
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("Hello World~");
return "Hello World~";
}
}

然后在Postman中添加请求并测试,响应回来的数据也是 Hello World~,说明测试成功!

如要保存,直接按 ctrl+s,命名并添加集合(文件夹)即可。

3、请求相关的参数

3.1 简单参数

1)原始方式
在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取。

缺点:繁琐,且需要手动类型转换

总结

1、Controller方法形参中声明HttpServletRequest对象
2、调用对象的getParameter(参数名)

2)SpringBoot方式
情况一:参数名与形参变量名相同,定义形参即可接收参数。
总结

1、请求参数名与方法形参变量名相同
2、会自动进行类型转换

情况二:方法形参名称与请求参数名称不匹配,可以使用 @RequestParam完成映射。
Postman中新建一个GET请求用于测试,GET请求如下

controller控制类中添加的代码如下

1
2
3
4
5
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name")String username,Integer age){
System.out.println(username+ ":"+age);
return "OK";
}

注:@RequestParam中的 required属性默认为true,表示该请求参数必须传递,如果不传递将报错。若该参数是可选的,则可以将 required属性设置为 true

总结

1、方法形参名称与请求参数名称不匹配,通过该注解完成映射
2、该注解的required属性默认是true,代表请求参数必须传递

3.2 实体参数

1)简单实体对象
请求参数名与形参对象属性名相同,定义POJO接收即可

2)复杂实体对象
请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJ0属性参数。

3)总结

请求参数名与形参对象属性名相同,即可直接通过POJO接收

3.3 数组集合参数

1)数组参数
请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

2)集合参数
请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系

注:集合变量名要和请求参数名保持一致,并且要在前面加上 @RequestParam,这样才能将多个请求参数的值封装到 List集合。

具体步骤如下:
Postman中新建一个GET请求用于测试,GET请求的请求路径如下

1
http://localhost:8080/listParam?hobby=game&hobby=java&hobby=sing

controller控制类中添加的代码如下

1
2
3
4
5
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
System.out.println(hobby);
return "OK";
}

重新启动并清空控制台,方便查看输出结果,直接点击Postman的send,发现成功输出OK。

再返回IDEA的控制台查看,发现成功输出了 [game, java, sing]

3)小结

数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装
集合:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系

3.4 日期参数 & JSON参数

1)日期参数

使用 @DateTimeFormat注解完成日期参数格式转换

具体步骤如下:
Postman中新建一个GET请求用于测试,请求路径(即url)如下

1
http://localhost:8080/dateParam?updateTime=2024-03-20 15:06:45

controller控制类中添加的代码如下

1
2
3
4
5
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}


重新启动并清空控制台,方便查看输出结果,直接点击Postman的send,发现成功输出OK。

再返回IDEA的控制台查看,发现成功输出了时间

2)JSON参数

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

具体步骤如下:
Postman中新建一个POST请求用于测试,请求路径(即url)如下

1
http://localhost:8080/jsonParam

选择Body ->row ->json,添加 json格式的数据

1
2
3
4
5
6
7
8
{
"name":"Tom",
"age":10,
"address":{
"province":"beijing",
"city":"beijing"
}
}

controller控制类中添加的代码如下

1
2
3
4
5
6
// JSON参数
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}

重新启动并清空控制台,方便查看输出结果,直接点击Postman的send,发现成功输出OK。

再返回IDEA的控制台查看,发现成功输出了集合数据

注:用到的两个pojo实体类如下,分别提供对应的 get、set和 toString方法
(User类)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.itweb.pojo;

public class User {
private String name;
private Integer age;
private 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;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
}

(Address类)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.itweb.pojo;

public class Address {
private String province;
private String 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;
}
@Override
public String toString() {
return "Address{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
'}';
}
}

3.5 路径参数

路径参数

通过请求URL直接传递参数,使用{..}来标识该路径参数,需要使用 @PathVariable 获取路径参数


相关的代码演示同上,不再赘述。

4、响应

4.1 响应数据

图解如下

4.2 @ResponseBody

1)类型

方法注解、类注解

2)位置

Controller方法上/类上

3)作用

将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应

4)说明

@RestController = @Controller +@ResponseBody

5)两种方式

1、未统一前,如下

2、统一响应结果 -> Result (code,msg,data)