使用工具Postman:网页测试与发送网页请求的接口测试工具
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";
}
简单实体参数:请求参数名和形参对象属性名相同,定义类接受即可
/**
* 接收简单实体参数
* @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";
}
数组参数:请求参数名和形参数组名相同且请求参数为多个,定义数组类型参数就可以接受
/*
* @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 listParm){
System.out.println(listParm);
return "ok";
}
日期参数:使用@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";
}
json参数:定义类接收 ,json数据键名与形参对象的属性名相同,使用@RequestBody标识
/**
* 使用实体类接受json数据
* @param user 使用@RequestBody标识这个类接受json数据
* @return 结果
*/
@RequestMapping("/simpleJsonData")
public String simpleJsonData(@RequestBody User user){
System.out.println(user);
return "ok";
}
路径参数:通过请求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";
}
要响应数据的方法或类使用@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 responseList(){
System.out.println("返回集合");
List 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;
}
}
创建一个响应结果类,统一返回的响应结果
/**
* 创建统一的响应结果类---省略了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 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("提示错误的信息");
}