目录

  • 请求响应
    • 请求
      • Postman 工具
      • 简单参数请求
      • 实体参数请求
      • 数组集合参数
      • 日期参数
      • JSON 参数
      • 路径参数
    • 响应

请求响应

请求

Postman 工具

Postman 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件

作用:常用于进行接口测试

简单参数请求

  1. 原始方式

    在原始的 Web 程序中,获取请求参数,需要通过 HttpServletRequest 对象手动获取(繁琐,手动类型转换)

    import jakarta.servlet.http.HttpServletRequest;
    import org.springframework.boot.autoconfigure.graphql.GraphQlProperties;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;@RestController
    public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){// 获取请求参数String name = request.getParameter("name");String ageStr = request.getParameter("age");int age = Integer.parseInt(ageStr);System.out.println("name:"+name+" age:"+age);return "success";}
    }
    

    用 GET 请求在 Postman 中输入对应的 API 并设置参数,点击发送

在这里插入图片描述

后端服务器接收数据成功显示“success”。

  1. Spring Boot 方式

    简单参数:参数名与形参变量名相同,定义形参即可接收参数

    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;@RestController
    public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(String name, Integer age){// 获取请求参数System.out.println("name:"+name+" age:"+age);return "success";}
    }
    

    用 POST 请求则是在 Postman 中输入对应的 API,在响应体中设置参数,点击发送

    在这里插入图片描述

    后端服务器接收数据成功显示“success”。

  2. 如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成映射

    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;@RestController
    public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(@RequestParam(name="name")String username, Integer age){// 获取请求参数System.out.println("name:"+username+" age:"+age);return "success";}
    }
    

    注意:用 @RequestParam 映射的参数必须传递,不传递则会报错,因为参数的 required 属性默认是 true

    public String simpleParam(@RequestParam(name="name", required=true)String username, Integer age)
    

    如果将 true 改为 false,不传递也不会报错

实体参数请求

  1. 简单实体对象:请求参数名与形参对象属性名相同,定义 POJO 接收即可
    假设前端传递 name 和 age 两个参数,则实体类可以定义为:

    public class User {private String name;private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
    }
    

    请求参数的方法为:

    @RequestMapping("/simplePojo")
    public String simplePojo(User user){// 获取请求参数System.out.println(user);return "success";
    }
    
  2. 复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套 POJO 属性参数

    有个实体类 User 定义如下

    public class User {private String name;private Integer age;private Address address;
    }
    

    其中嵌套着另一个实体类 Address,定义如下:

    public class Address {private String province;private String city;
    }
    

    如果说要传递值,则为 address.province=guangdongaddress.city=guangzhou

    在这里插入图片描述

数组集合参数

  1. 数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

    请求数组参数方法为:

    @RequestMapping("/arrayParam")
    public String arrayParam(String[] names){// 获取请求参数System.out.println(Arrays.toString(names));return "success";
    }
    

    传递参数时只需要一个一个传就可以了

    在这里插入图片描述

    控制台获取到数组参数

    在这里插入图片描述

  2. 集合参数:请求参数名与形参集合名称相同且请求参数为多个,用 @RequestParam 绑定参数关系

    请求集合参数的方法为

    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> names){// 获取请求参数System.out.println(names);return "success";
    }
    

    传递参数与数组参数一样

    在这里插入图片描述

日期参数

  1. 日期参数:使用 @DateTimeFormat 注解完成日期参数格式转换

    请求参数的方法为:

    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){// 获取请求参数System.out.println(updateTime);return "success";
    }
    

    注意:如果月份是个位数,要在前面加 0 才能成功传递参数

    在这里插入图片描述

JSON 参数

JSON 参数:JSON 数据键名与形参对象属性名相同,定义 POJO 类型形参即可接收参数,需要使用 @RequestBody 标识

请求参数的方法为:

@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){// 获取请求参数System.out.println(user);return "success";
}

传递参数给后端要按照 JSON 格式,并且实体类中的变量名要与请求参数 JSON 中的一致

在这里插入图片描述

路径参数

路径参数:通过请求 URL 直接传递参数,使用 {…} 来标识该路径参数,需要使用 @PathVariable 获取路径参数

@RequestMapping("/path/{id}") // path后面的id不能写死,应该动态的获取
public String pathParam(@PathVariable Integer id){// 获取请求参数System.out.println(id);return "success";
}

传递参数的时候就不用设置参数值了,直接填写 URL 即可

在这里插入图片描述

如果要用多个路径参数,只需在前一个后面加上”/参数名“即可

@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id, @PathVariable String name){// 获取请求参数System.out.println(id + " " + name);return "success";
}

响应

服务端在方法或者类上添加 @ResponseBody 来以 JSON 格式响应返回结果

关于服务端的响应部分其实在请求部分就有涉及,每当请求发送成功后,服务端都会返回一个“success”,但是在之前的代码中并没有 @ResponseBody 注解,这是因为 @RestController = @Controller + @ResponseBody,也就是说用只需添加 @RestController 即可。

由于返回的数据类型不同,响应格式也有差异

@RestController
public class HelloController {@RequestMapping("/hello")public String hello() {return "Hello World~";}@RequestMapping("/getAddress")public Address getAddress() {Address ad = new Address();ad.setProvince("广东");ad.setCity("深圳");return ad;}@RequestMapping("/getAddresses")public List<Address> getAddresses() {List<Address> list = new ArrayList<>();Address ad = new Address();ad.setProvince("广东");ad.setCity("深圳");Address ad2 = new Address();ad2.setProvince("广西");ad2.setCity("桂林");list.add(ad);list.add(ad2);return list;}
}

响应的格式有字符串、JSON 格式、JSON格式的数组

在这里插入图片描述

这样响应的格式不规范,不便管理和维护,所以要创建一个响应结果封装类来统一响应结果

/*
* 统一响应结果封装类
*/
public class Result {private Integer code; // 状态码,200为成功,500为失败private String message; // 返回消息private Object data; // 返回数据public Result(Integer code, String message, Object data) {this.code = code;this.message = message;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static Result success(Object data) {return new Result(200, "success", data);}public static Result success() {return new Result(200, "success", null);}public static Result error(String message) {return new Result(500, message, null);}@Overridepublic String toString() {return "Result{" +"code=" + code +", message='" + message + '\'' +", data=" + data +'}';}
}

将原来的方法改为:

@RestController
public class HelloController {@RequestMapping("/hello")public Result hello() {return Result.success("hello world");}@RequestMapping("/getAddress")public Result getAddress() {Address ad = new Address();ad.setProvince("广东");ad.setCity("深圳");return Result.success(ad);}@RequestMapping("/getAddresses")public Result getAddresses() {List<Address> list = new ArrayList<>();Address ad = new Address();ad.setProvince("广东");ad.setCity("深圳");Address ad2 = new Address();ad2.setProvince("广西");ad2.setCity("桂林");list.add(ad);list.add(ad2);return Result.success(list);}
}

如此一来,响应格式就全部统一了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91014.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91014.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91014.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高并发系统技术架构

&#xff08;点个赞&#xff0c;算法会给你推荐更多类似干货 ~&#xff09; 口诀&#xff1a; CDN 扛静态&#xff0c;WAF 防恶意&#xff1b;验证码拦机器&#xff1b; Nginx 先限流&#xff0c;Sentinel 再熔断&#xff1b; Redis 扣库存&#xff0c;MQ 异步写&#xff1b; 对…

python任意模块间采用全局字典来实现借用其他类对象的方法函数来完成任务或数据通信的功能

我们在编写pthon代码时&#xff0c;模块间的数据通信主要采用以下几种方法&#xff1a;1、采用全局变量。所有模块都通过引用全局变量&#xff0c;通过本模块对此全局变量数据的修改值&#xff0c;其他模块也能访问并得到此全局变量的当前值&#xff0c;由于全局变量的不可控性…

linux 部署 flink 1.15.1 并提交作业

下载 1.15.1 https://flink.apache.org/downloads.html#apache-flink-1151 部署模式分类 会话模式应用模式单作业模式 1、会话模式 先启动一个集群&#xff0c;保持一个会话&#xff0c;然后通过客户端提交作业&#xff0c;所有作业都在一个会话执行&#xff1b; 会话模式适合规…

Redis数据量过大的隐患:查询会变慢吗?如何避免?

一、Redis数据过多引发的五大隐患&#xff08;附系统交互图&#xff09; #mermaid-svg-X83bpHUu830QXKUt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-X83bpHUu830QXKUt .error-icon{fill:#552222;}#mermaid-svg-…

网络与信息安全有哪些岗位:(3)安全运维工程师

安全运维工程师是企业安全防线的 “日常守护者”&#xff0c;既要确保安全设备与系统的稳定运行&#xff0c;又要实时监控潜在威胁&#xff0c;快速响应并处置安全事件&#xff0c;是连接安全技术与业务运营的关键角色。其核心价值在于通过常态化运维&#xff0c;将安全风险控制…

鱼皮项目简易版 RPC 框架开发(三)

本文为笔者阅读鱼皮的项目 《简易版 RPC 框架开发》的笔记&#xff0c;如果有时间可以直接去看原文&#xff0c; 1. 简易版 RPC 框架开发 前面的内容可以笔者的前面两个篇笔记 鱼皮项目简易版 RPC 框架开发&#xff08;一&#xff09; 鱼皮项目简易版 RPC 框架开发&#xff08;…

嵌入式Linux:注册线程清理处理函数

在 Linux 多线程编程中&#xff0c;线程终止时可以执行特定的清理操作&#xff0c;通过注册线程清理函数&#xff08;thread cleanup handler&#xff09;来实现。这类似于使用 atexit() 注册进程终止处理函数。线程清理函数用于在线程退出时执行一些资源释放或清理工作&#x…

【Git】Linux-ubuntu 22.04 初步认识 -> 安装 -> 基础操作

文章目录Git 初识Git 安装Linux-centosLinux-ubuntuWindowsGit 基本操作配置 Git认识工作区、暂存区、版本库添加文件 -- 场景一查看 .git 文件添加文件 -- 场景二修改文件版本回退撤销修改情况一&#xff1a;对于工作区的代码&#xff0c;还没有 add情况二&#xff1a;已经 ad…

轻量级音乐元数据编辑器Metadata Remote

简介 什么是 Metadata Remote (mdrm) &#xff1f; Metadata Remote 是一个基于 Web 的音频元数据编辑工具&#xff0c;旨在简化在无头服务器&#xff08;即没有图形用户界面的服务器&#xff09;上编辑音频文件的元数据。用户只需使用 Docker 和浏览器&#xff0c;无需复杂的…

免费使用|共享服务器上线RTX3080(20GB显存)

共享服务器也上架GPU啦 生物信息学中有很多用到GPU的场景&#xff0c;例如我们分享过的&#xff1a;利用GPU加速TensorFlow、部署本地DeepSeek&#xff0c;空间转录组学习手册合辑加速。因此多种GPU供大家选择&#xff1a;RTX5090、4080S、5070显卡上机。为了让此前的CPU服务器…

搭建DM数据守护集群

1环境与规划准备3个kylin 10操作系统的虚拟机&#xff0c;规划IP、端口、安装目录等。说明搭建REALTIME归档模式、事务一致性的数据守护名称项初始主库机器dm1初始备库机器dm2监视器机器dmmon外部业务IP192.168.23.129192.168.23.130192.168.23.131内部心跳IP192.168.23.129192…

AUTOSAR进阶图解==>AUTOSAR_SRS_OCUDriver

AUTOSAR OCU驱动程序详解 AUTOSAR标准输出比较单元驱动程序架构与实现分析目录 1. 概述 1.1 OCU驱动程序简介1.2 功能概述 2. OCU驱动程序架构 2.1 架构图2.2 层次结构 3. OCU驱动程序组件设计 3.1 组件图3.2 接口定义 4. OCU驱动程序状态管理 4.1 状态图4.2 状态转换 5. OCU驱…

InfluxDB 与 HTTP 协议交互进阶(一)

引言 在当今数字化时代&#xff0c;数据处理的高效性和准确性成为了众多领域关注的焦点。InfluxDB 作为一款开源的时序数据库&#xff0c;凭借其高性能、易扩展等特性&#xff0c;在时间序列数据处理中占据了重要地位。而 HTTP 协议作为互联网应用层的核心协议之一&#xff0c…

NAS远程访问新解法:OMV与cpolar的技术协同价值

文章目录前言1. OMV安装Cpolar2. 配置FTP公网地址3. OMV FTP 配置4. OMV FTP远程连接前言 当家庭存储需求突破本地边界时&#xff0c;传统NAS方案往往陷入"连接困境"&#xff1a;复杂的端口转发配置、高昂的公网IP成本、以及始终存在的安全顾虑…开源解决方案OMV虽然…

vue 渲染 | 不同类型的元素渲染的方式(vue组件/htmlelement/纯 html)

省流总结&#xff1a;&#xff08;具体实现见下方&#xff09; vue 组件 ——》<component :is组件名> htmlelement 元素 ——》 ref 、★ v-for ref 或是 ★ vue 的 nextTick 纯 html 结构——》v-html 另外&#xff0c;当数据异步加载时&#xff0c;vue3中如何渲…

Charles中文版深度解析,轻松调试API与优化网络请求

在现代软件开发过程中&#xff0c;调试API、捕获HTTP/HTTPS流量以及优化网络性能是开发者不可避免的挑战。特别是在处理复杂的网络请求和验证API接口的数据传输准确性时&#xff0c;开发者需要一款强大且易于使用的工具。Charles抓包工具凭借其功能强大、界面简洁、易于操作的特…

【CF】Codeforces Round 1039 (Div. 2) E1 (二分答案求中位数)

E1. Submedians (Easy Version)题目&#xff1a;思路&#xff1a;经典不过加了点东西对于求中位数&#xff0c;我们必然要想到二分答案&#xff0c;具体的&#xff0c;对于所有大于等于 x 的数我们令其奉献为 1&#xff0c;小于的为 -1&#xff0c;如果存在某段区间的奉献和大于…

ESP32-S3学习笔记<8>:LEDC的应用

ESP32-S3学习笔记&#xff1c;8&#xff1e;&#xff1a;LEDC的应用1. 头文件包含2. LEDC的配置2.1 配置定时器2.1.1 speed_mode/设置速度模式2.1.2 duty_resolution/设置占空比分辨率2.1.3 timer_num/选择定时器2.1.4 freq_hz/设定PWM频率2.1.5 clk_cfg/选择LEDC的外设时钟源2…

网络安全第14集

前言&#xff1a;小迪安全14集&#xff0c;这集重点内容&#xff1a;0、什么是js渗透测试&#xff1f;在javascript中也存在变量和函数&#xff0c;存在可控变量和函数就有可能存在在漏洞&#xff0c;js开发的web应用和php、java开发的区别是&#xff0c;js能看得到的源代码&am…

代码随想录算法训练营第三十三天

LeetCode.62 不同路径 题目链接 不同路径 题解 class Solution {public int uniquePaths(int m, int n) {// dp表示到达ij有多少条路径int[][] dp new int[110][110];dp[1][1] 1;for(int i 0;i<m;i){dp[i][0] 1;}for(int j 0;j<n;j){dp[0][j] 1;}for(int i 1;i…