目录
6.1、Postman在发送请求时,如何传递json格式的请求参数
6.2、在服务端的controller方法中,如何接收json格式的请求参数
前言(SpringBoot程序请求响应流程)
以上一章的程序为例,一个基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。
的Tomcat)。而我们在开发web程序时呢,定义了一个控制器类Controller,请求会被部署在Tomcat中的Controller接收,然后Controller再给浏览器一个响应,响应一个字符在浏览器发起请求,请求了我们的后端web服务器(也就是内置串 “Hello World”。 而在请求响应的过程中是遵循HTTP协议的。
但是在Tomcat这类Web服务器中,是不识别我们自己定义的Controller的。而Tomcat是一个Servlet容器,支持Serlvet规范,因此在tomcat中是可以识别 Servlet程序的。

那么在SpringBoot进行web程序开发时,它其实内置了一个核心的Servlet程序 DispatcherServlet,称之为 核心控制器,也可以叫做 前端控制器。 DispatcherServlet 负责接收页面发送的请求,然后根据执行的规则,将请求再转发给后面的请求处理器Controller,请求处理器处理完请求之后,最终再由DispatcherServlet给浏览器响应数据。
那将来浏览器发送请求,会携带请求数据,包括:请求行、请求头;请求到达tomcat之后,tomcat会负责解析这些请求数据,然后呢将解析后的请求数据会传递给Servlet程序中的HttpServletRequest对象,那也就意味着 HttpServletRequest 对象就可以获取到请求数据。 而Tomcat,还给Servlet程序传递了一个参数 HttpServletResponse,通过这个对象,我们就可以给浏览器设置响应数据 。
一、请求

1、Postman(接口测试工具)
1.1、介绍
Postman是一款支持http协议的接口调试与测试工具,它不仅可以调试简单的css、html、脚本等简单的网页基本信息,还可以发送几乎所有类型的HTTP请求
②、安装
运行安装包,创建一个工作空间


在新创建的工作空间中添加一个请求

这个软件我没创建账号(可能需要梯子)
2、简单参数
1.1、原始方式

Tomcat接收到http请求时:把请求的相关信息封装到HttpServletRequest对象中
在Controller中,我们要想获取Request对象,可以直接在方法的形参中声明 HttpServletRequest 对象。然后就可以通过该对象来获取请求信息:
//根据指定的参数名获取请求参数的数据值
String request.getParameter("参数名")
@RestController
public class RequestController {
//原始方式
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request){
// http://localhost:8080/simpleParam?name=Tom&age=10
// 请求参数: name=Tom&age=10 (有2个请求参数)
// 第1个请求参数: name=Tom 参数名:name,参数值:Tom
// 第2个请求参数: age=10 参数名:age , 参数值:10
String name = request.getParameter("name");//name就是请求参数名
String ageStr = request.getParameter("age");//age就是请求参数名
int age = Integer.parseInt(ageStr);//需要手动进行类型转换
System.out.println(name+" : "+age);
return "OK";
}
}
该方式仅做了解接口,在以后的开发中基本不会用到,原因是因为:
1. 写法比较繁琐 2. 需要手动的进行类型转换
1.2、SpringBoot方法
在Springboot方法中可以自动进行类型转换。在Springboot的环境中,对原始的API进行了封装,接收参数的形式更加简单。 对于简单参数来讲,只要保证请求参数名和Controller方法中的形参名保持一致,就可以获取到请求参数中的数据值。

GEt方法
//springboot方式
@RequestMapping("/simpleParam")
public String simpleParam(String name,Integer age){
System.out.println(name+":"+age);
return "OK";
}
发送Post请求: 

结果

如果形参与请求参数对应不上,也可以通过注解@RequestParam来进行映射:

//springboot方式
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name="name") String name, Integer age){
System.out.println(name+":"+age);
return "OK";
}
结果

但是如果没有设置@RequestParam注解,且方法形参名与请求参数名不一致,那么虽然会无法接收到请求数据,但是它不会报错
注解@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递就会报错:
③、小结

3、实体参数
在使用简单参数做为数据传递方式时,前端传递了多少个请求参数,后端controller方法中的形参就要书写多少个。如果请求参数比较多,通过上述的方式一个参数一个参数的接收,会比较繁琐。
3.1、简单实体对象
此时,我们可以考虑将请求参数封装到一个实体类对象中。 要想完成数据封装,需要遵守如下规则:请求参数名与实体类的属性名相同
代码示例:
//2.实体参数
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user);
return "OK";
}

3.2、复杂实体对象

User.java
package com.yaqi.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.java
package com.yaqi.pojo;
public class Address

最低0.47元/天 解锁文章
576

被折叠的 条评论
为什么被折叠?



