请求响应(学习笔记)
请求响应
文章目录
- 请求响应
- 请求
- Postman
- 简单参数
- 实体参数
- 数组集合参数
- 日期参数
- JSON参数
- 路径参数
- 响应
- 分层解耦
请求响应:
- 请求(HttpServeltRequest):获取请求数据
- 响应(HttpServletResponse): 设置响应数据
- BS架构:Browser/Server 浏览器/服务器 架构模式,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。(维护方便,体验一般)
- CS架构:Client/Server 客户端/服务端架构模式。(开发、维护麻烦,体验不错)
请求
Postman
当前最主流的开发模式:前后端分离开发。
由于前后端分离,后端开发没有前端页面,浏览器发送的请求都是get请求
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
作用:常用于进行接口测试。
简单参数
-
原始方式
在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取
package com.itheima;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
public class RequestController {
//原始方式
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request) {
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
int age = Integer.parseInt(ageStr);
System.out.println(name+":"+age);
return "OK";
}
}
//使用postman发送Get请求
//http://localhost:8080/simpleParam?name=Tom&age=10
//ok
-
SpringBoot方式
简单参数:参数名与形参变量名相同,定义形参即可接收参数
//SpringBoot方式
@RequestMapping("simpleParam")
public String simpleParam(String name,Integer age) {
System.out.println(name+":"+age);
return"OK";
}
简单参数:如果方法形参名称与请求参数名称不匹配,可以使用@RequestParam
完成映射
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name ="name")String username,Integer age) {
System.out.println(username+":"+age);
return "OK";
}
//使用postname发送GET请求
//http://localhost:8080/simpleParam?name=ZAY&age=3
//
@RequestParm 中的required默认属性为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false
实体参数
当参数需要传输过多,使用简单参数就会变得繁琐,可以将所有的参数封装到一个实体类之中
- 简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可
@RequestMapping("/simplePojo")
public String simplePojo(User user) {
System.out.println(user);
return "OK";
}
public class User{
private String name;
private Integer age;
public User(String name,Integer age){
this.name = name;
this.age = age;
}
public User(){
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public Integer getAge(){
return age;
}
public void setAge(Integer age){
this.age = age;
}
}
- 复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
public class User{
private String name;
private Integer age;
private Address address;
}
public class Address{
private String province;
private String city;
}
@RequestMapping("/complexPojo")
public String complexPojo(User user){
Systm.out.println(user);
return "OK";
}