SpringBoot数据请求和响应

二、SpringBoot请求     

使用工具Postman:网页测试与发送网页请求的接口测试工具

2.1、接受简单参数

1)原始结构接受参数

原始的web程序中,获取请求参数,需要通过HttpServelRequest对象获取,使用内部的getParameter方法获取具体参数

import jakarta.servlet.http.HttpServletRequest;/*** 使用原始方法接受请求的参数* @return 结果*/@RequestMapping("/simpleParm")public String simpleParm(HttpServletRequest request){// 获取请求参数---获取到的都是字符串参数String name = request.getParameter("name");String agestr = request.getParameter("age");// 原始的方法需要直接转换类型int age = Integer.parseInt(agestr);System.out.println("参数为:" + name + ":" + age);return "ok";}

2)使用springboot接受参数

  • 接受简单参数:请求参数名与形参变量名相同,定义形参就可以接受参数,会进行自动类型转换 ---注意:如果参数名和形参名不一致,接受的数据值为null

    /*** springboot方法接受参数* @return 结果*/@RequestMapping("/simpleParm_spring")public String simpleParm_spring(String name,Integer age){System.out.println("接受的参数为:"+ name + "," + age);return "ok";}
  • 接受简单参数,请求参数名与形参变量名不匹配,可以使用@RequestParam(value = "name")完成映射--注意:使用映射的参数必须传递,不传递就回报错,其它参数可以选择,还可以使用@RequestParam(defaultValue = "默认值")设置默认值

    /*** 参数名和形参名不一致* @param userName 形式参数名 ,参数名为name* @param userAge 形式参数名 ,参数名为userAge* @return 结果*/@RequestMapping("/simpleParm_no")public String simpleParm_no(@RequestParam(value = "name") String userName,Integer userAge){System.out.println("接受的参数为:"+ userName + "," + userAge);return "ok";}

2.2、接受实体参数

  • 简单实体参数:请求参数名和形参对象属性名相同,定义类接受即可

 /*** 接收简单实体参数* @param user 实体类内部的属性和请求参数名一致* @return 结果*/@RequestMapping("/simplePojo")public String simplePoj0(User user){System.out.println(user);return "ok";}
  • 复杂实体参数:请求参数名和形参对象属性名相同,定义类和类的嵌套接收即可

 /*** 复杂实体参数* @param user 类内部嵌套类Address类接受复杂实体参数* @return 结果*/@RequestMapping("/simplePojo_all")public String simplePojo_all(User user){System.out.println(user);return "ok";}

2.3、数组集合参数

  • 数组参数:请求参数名和形参数组名相同且请求参数为多个,定义数组类型参数就可以接受

/** @param happy 数组参数接受多个值* @return*/@RequestMapping("/simpleArray")public String simpleArray(String[] happy){System.out.println(Arrays.toString(happy));return "ok";}
  • 集合参数:请求参数名和形参集合名相同且请求参数为多个,使用@RequestParam绑定参数关系

    /*** @param listParm 使用集合参数接收多个值* @return 结果*/@RequestMapping("/simpleList")public String simpleList(@RequestParam List<String> listParm){System.out.println(listParm);return "ok";}

2.4、日期参数

日期参数:使用@DataTimeFormat注解完成日期参数格式转换

 /*** 使用@DateTimeFormat注解完成日期时间参数传递* @param updateTime 接收时间参数* @return 结果*/@RequestMapping("/simpleDataTime")public String simpleDateTime(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println("参数时间:" + updateTime);return "0k";}

2.5、json类型参数

json参数:定义类接收 ,json数据键名与形参对象的属性名相同,使用@RequestBody标识

    /*** 使用实体类接受json数据* @param user 使用@RequestBody标识这个类接受json数据* @return 结果*/@RequestMapping("/simpleJsonData")public String simpleJsonData(@RequestBody User user){System.out.println(user);return "ok";}

2.6、路径参数

路径参数:通过请求URL直接传递参数,使用{...}来标识该路径参数,使用@PathVariable获取路径参数

/*** 定义方法接受路径参数,可以接受多个值,之间使用/* @param id 使用@PathVariable标识这是一个路径参数* @param name 使用@PathVariable标识这是一个路径参数* @return 结果*/@RequestMapping("/path/{id}/{name}")public String pathParm(@PathVariable Integer id,@PathVariable String name){System.out.println(id + " , " + name);return "ok";}

三、springBoot响应

3.1、响应数据

要响应数据的方法或类使用@RequestBody标识,直接将方法的返回值作为响应数据返回,但是@RestController = @Controller + @RequestBody,所以使用@RestController标识的类中的所有方法都会将返回值最为响应分数据返回,返回的是实体类或者集合,返回时都会转为json格式响应

import com.example.demo.pojo.Address;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
import java.util.ArrayList;
import java.util.List;
​
/*** 创建响应类*/
@RestController
public class ResponseController {
​/*** @return 返回字符串的响应方法*/@RequestMapping("/responseString")public String responseString(){System.out.println("返回字符串");return "hello";}
​/*** @return 返回类对象的响应方法*/@RequestMapping("/responseAddress")public Address responseAddress(){System.out.println("返回类对象");Address address = new Address();address.setProvince("宁夏");address.setCity("银川");return address;}
​/*** @return 返回集合的响应方法*/@RequestMapping("/responseList")public List<Address> responseList(){System.out.println("返回集合");
​List<Address> addr = new ArrayList<>();Address address1 = new Address();address1.setProvince("宁夏");address1.setCity("银川");
​Address address2 = new Address();address2.setProvince("西安");address2.setCity("海源");
​addr.add(address1);addr.add(address2);return  addr;}
}

3.2、统一响应数据

创建一个响应结果类,统一返回的响应结果

/*** 创建统一的响应结果类---省略了get和set以及tostring方法*/
public class Result {// 统一响应码 1标识成功,0标识失败private Integer code;// 提示信息private String msg;// 返回数据private Object data;
}

为方便使用返回结果的类,内部提供静态的方法,返回结果类的对象

 // 定义成功的对象---传递返回的值public static Result success(Object data){return new Result(1,"成功",data);}// 定义成功的对象,响应结果不返回值---不返回值public static Result success(){return new Result(1,"成功",null);}// 定义失败的对象,不返回值,返回错误提示public static Result error(String err){return new Result(0,err,null);}

将响应的数据的返回值改为Result对象返回

 /*** @return 返回字符串的响应方法*/@RequestMapping("/responseString")public Result responseString(){System.out.println("返回字符串");return Result.success("hello");}
​
​/*** @return 返回类对象的响应方法*/@RequestMapping("/responseAddress")public Result responseAddress(){System.out.println("返回类对象");Address address = new Address();address.setProvince("银川");address.setCity("中卫");return Result.success(address);}
​/*** @return 返回集合的响应方法*/@RequestMapping("/responseList")public Result responseList(){System.out.println("返回集合");
​List<Address> addr = new ArrayList<>();Address address1 = new Address();address1.setProvince("银川");address1.setCity("中卫");
​Address address2 = new Address();address2.setProvince("西安");address2.setCity("海源");
​addr.add(address1);addr.add(address2);return  Result.error("提示错误的信息");}