• javaweb_05:请求响应——请求


    什么是请求响应:

    • 请求:获取请求数据
    • 响应:设置相应数据
    • BS框架:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存在服务端。
    • CS架构:Client/Server.客户端/服务器架构模式。(要下载客户端)

    一、Postman

    1、下载
    Postman是一款功能强大的网页调试与发送页面的HTTP请求的Chrome插件,常用于接口调试。
    链接:https://pan.baidu.com/s/1S8oiRrH_egjo80KCBS5IAA?pwd=yc7f
    提取码:yc7f
    下载完成后,直接双击安装。安装完成后的页面如下:(完成后自己注册登录)
    在这里插入图片描述
    2、使用
    运行在javaweb_04中写的springboot的SpringbootApplication中的代码
    在这里插入图片描述
    在Postman中创建工作空间:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    请求完成后,可以点击save保存该页面。
    在这里插入图片描述
    保存好之后,界面如下:
    在这里插入图片描述

    二、简单参数

    在请求服务端时,传递的是一些普通的请求数据。

    1、原始方式请求参数

    在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取。
    创建了一个新模块,并且写了一个新的controller函数去传递消息
    在这里插入图片描述
    在这里插入图片描述

    新建类,并在该类类中书写代码,完成后运行该项目的启动类:
    在这里插入图片描述

    package org.example.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    
    @RestController
    public class RequestController {
        //原始方式
        @RequestMapping("/simpleParam")
        public String simpleParam(HttpServletRequest request){
            //通过request获取请求参数
            String name = request.getParameter("name");
            String strAge = request.getParameter("age");
            int age = Integer.parseInt(strAge);
            System.out.println(name + ":" +age);
            return "ok";
        }
    }
    
    
    

    运行起来后在postman中做测试:
    在这里插入图片描述

    2、pringboot中接受简单参数

    注意请求的参数名与代码中的形参名一定保持一致就可以成功
    简单参数:参数名与形参变量名相同,定义形参即可接收参数。

    package org.example.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    
    @RestController
    public class RequestController {
        //原始方式
    //    @RequestMapping("/simpleParam")
    //    public String simpleParam(HttpServletRequest request){
    //        //通过request获取请求参数
    //        String name = request.getParameter("name");
    //        String strAge = request.getParameter("age");
    //        int age = Integer.parseInt(strAge);
    //        System.out.println(name + ":" +age);
    //        return "ok";
    //    }
    
        @RequestMapping("/simpleParam")
        public String simpleParam(String name,Integer age){
            System.out.println(name + ":" +age);
            return "okkkkkkk~";
        }
    }
    
    
    

    运行结果:
    在这里插入图片描述
    使用Post发送请求(代码不变):
    在这里插入图片描述

    三、实体参数

    1、简单实体对象

    请求参数名与形参对象属性名相同(封装成功的要点)。定义POJO接收即可(将参数封装在实体对象中)
    在这里插入图片描述
    ①准备一个user类去封装输出的参数
    在这里插入图片描述

    package org.example.pojo;
    
    //实体类
    public class User {
        private String name;
        private Integer age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    

    ②在requestController中定义方法去使用user:

    package org.example.controller;
    
    import org.example.pojo.User;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    
    @RestController
    public class RequestController {
        //原始方式
    //    @RequestMapping("/simpleParam")
    //    public String simpleParam(HttpServletRequest request){
    //        //通过request获取请求参数
    //        String name = request.getParameter("name");
    //        String strAge = request.getParameter("age");
    //        int age = Integer.parseInt(strAge);
    //        System.out.println(name + ":" +age);
    //        return "ok";
    //    }
    
        @RequestMapping("/simpleParam")
        public String simpleParam(String name,Integer age){
            System.out.println(name + ":" +age);
            return "okkkkkkk~";
        }
    
        //2、实体参数
        @RequestMapping("/simplePojo")
        public String simplePojo(User user){
            System.out.println(user);
            return "successful";
        }
    }
    
    

    ③启动当前服务,在postman中查看
    在这里插入图片描述
    在这里插入图片描述

    2、复杂实体对象

    请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
    在这里插入图片描述

    四、数组集合参数

    在表单中有复选框,可以勾选多个值,要将多个值提交,就得使用数组集合参数。

    1、数组参数

    请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数。
    在这里插入图片描述

        //数组集合参数
        @RequestMapping("/arrayParam")
        public String arrayParam(String []hobby){
            System.out.println(Arrays.toString(hobby));
            return "successful";
        }
    

    运行,在postman中send之后:
    在这里插入图片描述

    在这里插入图片描述

    2、集合参数

    在这里插入图片描述
    在这里插入图片描述

    五、日期时间参数

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

    //日期时间参数
        @RequestMapping("/dataParam")
        public String dataParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updataTime){
            System.out.println(updataTime);
            return "成功发送时间";
        }
    

    在这里插入图片描述
    在这里插入图片描述

    六、Json参数(Post)

    json数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识
    在这里插入图片描述

    在这里插入图片描述

    //json参数
        @RequestMapping("/jsonParam")
        public String jsonParam(@RequestBody User user){
            System.out.println(user);
            return "json参数发送成功";
        }
    

    User类:

    package org.example.pojo;
    
    //实体类
    public class User {
        private String name;
        private Integer age;
    
        private Address address;
    
        public Address getAddress() {
            return address;
        }
    
        public void setAddress(Address address) {
            this.address = address;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", address=" + address +
                    '}';
        }
    }
    
    

    Address类:

    package org.example.pojo;
    
    public class Address {
        private String province;
        private String ctiy;
    
        @Override
        public String toString() {
            return "Address{" +
                    "province='" + province + '\'' +
                    ", ctiy='" + ctiy + '\'' +
                    '}';
        }
    
        public String getProvince() {
            return province;
        }
    
        public void setProvince(String province) {
            this.province = province;
        }
    
        public String getCtiy() {
            return ctiy;
        }
    
        public void setCtiy(String ctiy) {
            this.ctiy = ctiy;
        }
    }
    
    

    七、路径参数

    1、单个参数

    通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable
    获取路径参数(类似翻页)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    //路径参数
        @RequestMapping("/path/{id}")
        public String pathParam(@PathVariable Integer id){
            System.out.println(id);
            return "发送成功";
        }
    

    2、多个参数

    在这里插入图片描述
    在这里插入图片描述

    //路径参数
        @RequestMapping("/path/{id}/{name}")
        public String pathsParam(@PathVariable Integer id,@PathVariable String name){
            System.out.println(id + ":" + name);
            return "多个参数发送成功";
        }
    
  • 相关阅读:
    DAO:Web3 的必要组件
    神经网络算法有哪些模型,神经网络预测模型实例
    供应链全流程计划与排产解决方案核心功能概要
    英飞凌TLF35584规格书中文
    图文虚线之CGContextSetLineDash
    动态规划之完全背包问题
    【Linux】管道命令split、awk、sed【二】
    英国G5生物医学类专业IB成绩要求多高?
    dubbo 自定义异常
    PerfView专题 (第十二篇):对 C# 下的 SDK 类库进行监控(大结局)
  • 原文地址:https://blog.csdn.net/qq_52200849/article/details/141064257