这次来了解一下JavaWeb中请求响应相关的内容,本篇将带你快速了解JavaWeb中的请求响应以及Postman工具的使用!
体系结构图如下,
请求(HttpServletRequest):获取请求数据
响应(HttpServletResponse):设置响应数据
1) BS架构
Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。
优点是维护起来较方便,但给用户的体验较一般。
注:一般来说用Java语言开发的应用程序都是基于 BS架构。
2)CS架构
Client/Server,客户端/服务器架构模式。需要单独安装客户端。
缺点是开发维护麻烦,但能给用户较好的体验。
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
作用:常用于进行接口测试
下载地址:https://www.postman.com/downloads/
关于Postman的下载,非常简单,不再赘述。
首次使用,需要注册登录。登录进去如下图,首先点击 Workspaces创建工作空间 ->Create Workspace,输入名称,选择可见范围,点击创建即可,如下。
创建完成后,添加请求并测试。首先启动我们SpringBoot的入门程序,并成功在浏览器中访问。
对应的controller类如下
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,命名并添加集合(文件夹)即可。
1)原始方式
在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取。
缺点:繁琐,且需要手动类型转换
总结
1、Controller方法形参中声明HttpServletRequest对象
2、调用对象的getParameter(参数名)
2)SpringBoot方式
情况一:参数名与形参变量名相同,定义形参即可接收参数。
总结
1、请求参数名与方法形参变量名相同 2、会自动进行类型转换
情况二:方法形参名称与请求参数名称不匹配,可以使用 @RequestParam完成映射。
Postman中新建一个GET请求用于测试,GET请求如下
controller控制类中添加的代码如下
@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,代表请求参数必须传递
1)简单实体对象
请求参数名与形参对象属性名相同,定义POJO接收即可
2)复杂实体对象
请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJ0属性参数。
3)总结
请求参数名与形参对象属性名相同,即可直接通过POJO接收
1)数组参数
请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
2)集合参数
请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系
注:集合变量名要和请求参数名保持一致,并且要在前面加上 @RequestParam,这样才能将多个请求参数的值封装到 List集合。
具体步骤如下:
Postman中新建一个GET请求用于测试,GET请求的请求路径如下
http://localhost:8080/listParam?hobby=game&hobby=java&hobby=sing
controller控制类中添加的代码如下
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
System.out.println(hobby);
return "OK";
}
重新启动并清空控制台,方便查看输出结果,直接点击Postman的send,发现成功输出OK。
再返回IDEA的控制台查看,发现成功输出了 [game, java, sing]
3)小结
数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装
集合:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系
1)日期参数
使用 @DateTimeFormat注解完成日期参数格式转换
具体步骤如下:
Postman中新建一个GET请求用于测试,请求路径(即url)如下
http://localhost:8080/dateParam?updateTime=2024-03-20 15:06:45
controller控制类中添加的代码如下
@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)如下
http://localhost:8080/jsonParam
选择Body ->row ->json,添加 json格式的数据
{
"name":"Tom",
"age":10,
"address":{
"province":"beijing",
"city":"beijing"
}
}
controller控制类中添加的代码如下
// JSON参数
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
重新启动并清空控制台,方便查看输出结果,直接点击Postman的send,发现成功输出OK。
再返回IDEA的控制台查看,发现成功输出了集合数据
注:用到的两个pojo实体类如下,分别提供对应的 get、set和 toString方法
(User类)
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类)
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 + '\'' +
'}';
}
}
路径参数
通过请求URL直接传递参数,使用{..}来标识该路径参数,需要使用 @PathVariable 获取路径参数
相关的代码演示同上,不再赘述。
图解如下
1)类型
方法注解、类注解
2)位置
Controller方法上/类上
3)作用
将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
4)说明
@RestController = @Controller +@ResponseBody
5)两种方式
1、未统一前,如下
2、统一响应结果 -> Result (code,msg,data)