请求响应--概述

82 阅读5分钟

​ 请求响应

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.统一响应结果:不管进行什么操作,返回给前端的数据格式是一样的,便于维护
 */