本篇主要介绍一个发送请求的工具—postman,然后对请求中的参数进行介绍,例如简单参数、实体参数、数组参数、集合参数、日期类型参数以及json类型参数,对这些参数接收进行总结。最后对响应数据进行介绍,使用统一响应结果返回浏览器数据。
目录 :
目录
一、发送请求工具——postman
二、注解的介绍:
三、请求参数的接收
1、简单参数:
2、实体参数
简单实体参数:
复杂实体参数:
3、数组类型参数:
4、集合类型参数:
5、日期类型参数:
6、JSON格式参数:
四、响应数据:
postman是发送请求的工具,访问操作类中的方法,然后在这个方法return一个数据,就是响应数据,返回到postman;
请求响应的工具:打开postman,然后创建一个workspaces,可以在输入框内输入请求链接,并且可以选择请求方式:上面有save,可以将请求进行保存,需要先创建一个集合,然后保存到里面即可;(可以直接在这个软件中输入进行测试即可)
RestController注解:
这个注解中包含两个注解:@Controller和@ResponseBody注解,@ResponseBody注解是将返回的数据结构转换为 Json 格式。
@RequestMapping注解:
将请求和处理请求的控制器方法关联起来,建立映射关系。SpringMVC中接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。
@RequestParam注解:如果方法形参名和请求参数名不匹配,可以使用该注解完成映射。
项目层级结构:
springboot方式下获取get请求的参数,先编写好请求类,然后运行启动类,然后在postman中输入请求链接,然后在后面输入?+参数以及参数的值,就可以在idea中获取到对应的参数并在postman中得到响应结果;注意controller类中的方法参数要和postman中请求链接后面的参数名要相同;
//传统方式接受简单参数:
// @RequestMapping("/simpleTest")
// public String params_test(HttpServletRequest request){
// String name=request.getParameter("name");
// String age = request.getParameter("age");
// int age1 = Integer.parseInt(age);
// System.out.println(name+":"+age1);
// return "OK";
//springboot方式接收简单参数:
@RequestMapping("/simpleTest")
public String params_test(String name, Integer age) {
System.out.println(name + ":" + age);
return "OK";
}
在postman中进行测试:
后端也会得到响应数据:
请求参数名与形参对象属性名相同,定义一个实体类来接收:
例如,前端发送的参数为name和age,此时可以定义一个实体类User:
package com.web_test.pojo;
public class User {
private String name;
private Integer age;
private Address address;
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
public void setAddress(Address address) {
this.address = address;
}
public Address getAddress() {
return address;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
然后在controller中写好接收方法:
@RequestMapping("/gettest")
public String shitilei(User user){
System.out.println(user);
return "OK";
}
接下来在postman中进行测试:这样就可以将结果保存到对象的属性中。
如果一个类中的属性是另一个类的对象,这个类又包含另外的属性,如何封装:注意前端发送的请求中的连接后的参数输入方式,以及重新定义一个新的类并且重写get set以及toString方法即可;
对于多选框,可以选择多个选项,因此一般用数组进行接收;注意数组的名称要与参数名称相同;
前端发送的请求中的参数为fruits=草莓&fruits=苹果,此时可以在controller方法形参定义一个String[] fruits数组来接收即可,注意,请求参数名为fruits,数组的名称也要为fruits。
@RequestMapping("/arrayparam")
public String arraytest(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
同样,如果想用集合来接收fruits参数,需要使用@RequestParam注解来绑定参数关系。
@RequestMapping("/listparam")
public String listtest(@RequestParam List hobby){
System.out.println(hobby);
return "OK";
}
如果前端发送的请求中的参数为time=2024-01-01 12:00:00,需要先规定格式,使用@DateTimeFormat注解完成日期参数格式转换,与请求参数相同的格式。
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}
postman中测试:
json数据键名与形参对象属性名相同,定义一个实体类来进行接收,并且需要使用@RequestBody注解将json格式转化为实体类格式进行接收,与前面讲的注解中@ResponseBody注解类似,@ResponseBody是将实体类格式转化为json格式发送给前端。
//6.json参数:
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
postman中测试:
可以发现返回的响应的数据类型很多,字符串列表对象等,一会这样解析,一会那样解析,很复杂,所以为了方便起见,采用统一的响应结果;返回一个result对象,用一个result类然后里面包含三个属性以及set和get方法,并且重载了静态的success方法;controller类中的方法可以直接return调用的静态方法然后传进去参数即可;最后返回的对象会解析成json格式展现;注意需要使用@ResponseBody注解进行转换,将实体类对象格式转化为json格式发送到前端如下:
package com.web_test.controller;
import com.web_test.pojo.Address;
import com.web_test.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//以下是响应部分:
//可以直接使用统一结果封装类接收参数:
@RestController
public class responseConntroller {
//最初的方式:返回值为字符串:
// @RequestMapping("/hello")
// public String hello(){
// System.out.println("hello World");
// return "OK";
// }
//使用统一结果封装类接收参数:
@RequestMapping("/hello")
public Result hello(){
System.out.println("hello World");
return new Result(1,"success","Hello World!");
}
//最初的方式:返回值为对象:
// @RequestMapping("/getAdr")
// public Address getAdr(){
// Address address=new Address();
// address.setProvince("山东省");
// address.setCity("济南");
// return address;
// }
//使用统一结果封装类:返回值为对象:
@RequestMapping("/getAdr")
public Result getAdr(){
Address address=new Address();
address.setProvince("山东省");
address.setCity("济南");
return Result.success(address);
}
}
实体类Result为:
package com.web_test.pojo;
/**
* 统一响应结果封装类
*/
public class Result {
private Integer code ;//1 成功 , 0 失败
private String msg; //提示信息
private Object data; //数据 data
public Result() {
}
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public static Result success(Object data){
return new Result(1, "success", data);
}
public static Result success(){
return new Result(1, "success", null);
}
public static Result error(String msg){
return new Result(0, msg, null);
}
@Override
public String toString() {
return "Result{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}