二、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("提示错误的信息");}