请求响应
1:请求响应--概述:
请求:获取请求数据 响应:设置响应数据 BS架构:浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑都会存储在服务端 CS架构:客户端/服务器架构模式
CS架构:软件:(需要单独安装):开发维护麻烦,体验好
BS架构:浏览器即可:维护方便,体验一般
2.请求响应--请求:web开发常见请求参数的接收
(1)简单参数&实体参数
@org.springframework.web.bind.annotation.RestController
public class RestController {
// 1.简单参数
@RequestMapping("/simpleParam") //声明查找路径
public String simpleParam(HttpServletRequest request){
String name=request.getParameter("name");
String age=request.getParameter("age");
return "OK";
}
//2.实体参数:
@RequestMapping("/simplePojo")//指定请求路径
public String simplePojo(User0 user){ //接收User类型的参数,User对象里面将来封装前端传过来的参数:name和age
System.out.println(user);
return "OK";
}
(2)数组/集合参数:
//3.数组集合参数
@org.springframework.web.bind.annotation.RestController
public class RestController {
@RequestMapping("/arrayParam")//指定请求路径
public String arraryParam(String[]hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
}
(3)日期时间参数
@org.springframework.web.bind.annotation.RestController
public class RestController {
@RequestMapping("/dataParam")
public String dataParam(@DateTimeFormat(pattern = "yyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
//服务端声明日期类型的参数来接收前端postman传入的参数;
//使用注解@DateTimeFormat():来指定传入参数的格式
System.out.println(updateTime);
return "OK";
}
}
(4)JSON
(前后端进行数据交互的一种数据格式)
需要知道a:在postman中如何发起请求来传递JSON格式的请求参数。
要想发送一个请求并发送JSON形式的数据,我们需要将请求格式设置为:Post;
因为(JSON格式的请求数据是需要放在请求体当中携带到服务端的:)中所以要在postman选择Body
编写JSON时:所有的key都必须使用""引起来。
eg:"name" :"tom"。 "age":16
b:在服务端如何接收JSON格式的数据:通过实体对象!!!来接收
@org.springframework.web.bind.annotation.RestController
public class RestController {
@RequestMapping("/JsonParam")//方法的请求路径
public String JsonParam(@RequestBody User0 user0){
//使用注解:@RequestBody:获取postman发送的JSON并将JSON对象封装到实体对象user0中
System.out.println(user0);
System.out.println(user0);
return "OK";
}
}
(5)路径参数:
通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数。
@org.springframework.web.bind.annotation.RestController
public class RestController {
@RequestMapping("/path/{id}") //请求路径:/path/{id}: "不能写死(即不用具体的数字)而使用,{id}来知道路径参数的参数名"
public String pathParam(@PathVariable Integer id){
//必须使用@PathVariable注解来来获取postman传入路径参数并将路径参数的值绑定给方法的形参Integer id,这样方法就可以接收到传入的id了
System.out.println(id);
return "OK";
}
}
获取多个路径参数(eg:两个)
注意:可以获取多个路径参数:使用"/"分割,来写第二个参数即可
http://localhost/path/10/tom
然后定义一个方法来指定访问路径
@org.springframework.web.bind.annotation.RestController
public class RestController {
@RequestMapping("/path/{id}/{name}") {}:指定路径参数
public String pathParam(@PathVariable Integer id,@PathVariable String name){
使用@PathVariable注解来获取postman传入路径参数并将路径参数的值绑定给方法的形参Integer id,String name
System.out.println(id+name);
return "OK";
}
}
注意:路径参数名必须和形参名称必须保持一致才能绑定成功!!!!!!!!!
3.请求--响应--响应
(1)@ResponseBody:
##作用:
将方法的返回值 直接作为 响应数据 响应给客户端浏览器。(原来我们一直是使用:return返回)
如果是方法的返回值是对象/集合:就会先将他们转换成JSON类型的数据,然后在响应给客户端浏览器;
##位置:
Controller方法上/类上
说明:我们是直接使用@RestController放到类上面
因为@RestController=@Controller+@ResponseBody
在Controller类中定义的每一个对外暴露方法:我们都称为:功能接口;而上面的路径:我们称为接口的访问路径
*/
/*
1.我们发现每个功能接口响应回去的数据都不一样:eg:hello world, 地址1,地址2...
所以就需要一个规范:给所有的功能接口(方法)设置一个统一的响应结果格式(方便,维护):
!!!使用一个实体对象result来接收,-->:最后经过@ResponseBody的处理之后:就会相应一个JSON格式的数据
所有的Controller方法都需要返回一个result对象即可
改进:使用Result对象返回/响应
(2)演示:
@RestController
public class ResponseController { //类
@RequestMapping("/hello")
public Result hello(){
System.out.println("Hello,World");
//return new Result(1,"success","Hello,World");
return Result.success("Hello,World");
//上面两种都可以:第二种:因为是static,所以可以直接使用类名调用方法success(Object data)
// 只需要传入响应信息data即可(因为前面两项都已经包含在了success方法中了)
}
//注:之后我们访问路径/hello时:注解@ResponBody就会将Result对象转化为JSON类型的数据。
@RequestMapping("/getAddr")
public Result getAddr(){ //第二个方法:用来获取地址address;返回值:为对象Address
Address addr=new Address(); //获取Address类的对象
addr.setProvince("河北"); // 使用set方法,设置值
addr.setCity("石家庄");
return Result.success(addr);
}
@RequestMapping("/listAddr")
public Result listAddr(){ //第三个方法:返回值为集合
List<Address>list=new ArrayList<>();
Address addr=new Address(); //创建Address对象
addr.setProvince("北京");
addr.setCity("北京");
Address addr1=new Address(); //创建Address对象
addr1.setProvince("山西");
addr1.setCity("大同");
list.add(addr);
list.add(addr1);
return Result.success(list);
}
}
总结:@ResponseBody注解:
/*
1.位置:在Controller类上/方法上
2.作用:将方法的返回值直接响应,若返回值是实体对象/集合,转为JSON格式响应
3.统一响应结果:不管进行什么操作,返回给前端的数据格式是一样的,便于维护
*/