菜鸟之路Day27一一请求响应
作者:blue
时间:2025.4.29
[TOC]
一.请求
1.简单参数
1.1原始方式
在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取
@RestController
public class simpleParamController {
@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: " + name + ", age: " + age);
return "OK";
}
}
AI 代码解读
1.2springboot方式
①简单参数:参数名与形参变量名相同,定义形参即可接收参数
//SpringBoot方式
@RestController
public class simpleParamController {
@RequestMapping("/simpleParam")
public String simpleParam(String name,int age) {
System.out.println("name: " + name + ", age: " + age);
return "OK";
}
}
AI 代码解读
这次我们利用采用Post方式发送请求
②简单参数:如果方法形参名称与请求参数名称不匹配,可以使用@RequestParam完成映射
注意:@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false。
//SpringBoot方式
@RestController
public class simpleParamController {
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name="name",required=false) String username, int age) {
System.out.println("name: " + username + ", age: " + age);
return "OK";
}
}
AI 代码解读
2.实体参数
2.1简单实体对象
请求参数名与形参对象属性名相同,定义POJO接收即可
@RequestMapping("/simplePojo")
public String simplePojo(User user){
//User是提前自定义好的类
System.out.println("name: " + user.getName() + ", age: " + user.getAge());
return "OK";
}
AI 代码解读
package com.bluening.pojo;
public class User {
private String name;
private int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
AI 代码解读
2.2复杂实体对象
请求参数名与形参对象属性名相同,按照对象层次结构关系即可嵌套POJO属性参数
public class User {
private String name;
private int age;
private Address address;
}
AI 代码解读
public class Address {
private String province;
private String city;
}
AI 代码解读
@RequestMapping("/complexPojo")
public String complexPojo(User user){
System.out.println(user.toString());
return "OK";
}
AI 代码解读
3.数组集合参数
3.1数组参数
请求参数名和形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
AI 代码解读
3.2集合参数
请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系
@RequestMapping("/listParam")
public String listParam(@RequestParam ArrayList<String> hobby){
System.out.println(hobby);
return "OK";
}
AI 代码解读
4.日期参数
日期参数:使用@DataTimeFormat注解完成日期参数格式转换
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat (pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}
AI 代码解读
5.JSON参数
JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识
@RequestMapping("/JsonParam")
public String JsonParam(@RequestBody User user){
System.out.println(user);
return "Ok";
}
AI 代码解读
6.路径参数
路径参数:通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数
@RequestMapping("path/{id}/{name}")
public String path(@PathVariable Integer id ,@PathVariable String name) {
System.out.println(id);
System.out.println(name);
return "OK";
}
AI 代码解读
二.响应
@ResponseBody
类型:方法注解,类注解
位置:Controller方法上/类上
作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
说明:@RestController=@Controller+@ResponseBody
示例:
@RestController
public class ResponseController {
@RequestMapping("/helloRes")
public String helloRes() {
return "Hello World";
}
@RequestMapping("/AddressRes")
public Address AddressRes() {
return new Address("山东","青岛");
}
@RequestMapping("/ListRes")
public List<Address> ListRes() {
Address add1 = new Address("广东","广州");
Address add2 = new Address("山东","青岛");
List<Address> addressList = new ArrayList<Address>();
addressList.add(add1);
addressList.add(add2);
return addressList;
}
}
AI 代码解读
以上各个方法的返回数据都不相同,在实际的开发过程中,这样的数据是非常难以维护的,所以,我们需要对所有的方法返回的数据进行统一化操作,即统一响应结果
统一响应结果:
创建一个Result类,作为统一返回类型
public class Result {
//响应码,1代表成功,0代表失败
private Integer code;
//提示信息
private String msg;
//返回的数据
private Object 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 +
'}';
}
}
AI 代码解读
统一响应结果:
@RestController
public class ResponseController {
@RequestMapping("/helloRes")
public Result helloRes() {
return Result.success("Hello World");
}
@RequestMapping("/AddressRes")
public Result AddressRes() {
return Result.success(new Address("山东","青岛"));
}
@RequestMapping("/ListRes")
public Result ListRes() {
Address add1 = new Address("广东","广州");
Address add2 = new Address("山东","青岛");
List<Address> addressList = new ArrayList<Address>();
addressList.add(add1);
addressList.add(add2);
return Result.success(addressList);
}
}
AI 代码解读