SpringBoot和Axios数据的传递和接收-Restful完全版

2024-04-10 07:44

本文主要是介绍SpringBoot和Axios数据的传递和接收-Restful完全版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、基础知识铺垫
      • Axios使用
      • HTTP请求方式
      • 数据传输方式
      • SpringBoot获取数据的方式
  • 二、代码示例
    • (一)Path Variables
    • (二)Get、Delete
      • @RequestParam
      • @ModelAttribute
    • (三)Post、Put、Patch
      • @RequestBody
    • (四)复合型
  • 三、特殊数据

一、基础知识铺垫

Axios使用

使用axios发送请求,一般有三个最常用的属性。

属性含义
url请求的端点 URL
methodHTTP 请求方法(如 get, post, put, delete, patch 等)。
params / data如果 methodgetdelete,使用 params 来传递 URL 查询参数。如果是 post, put, patch,则使用 data 传递请求体数据。通常是一个对象 {}。

HTTP请求方式

Restful风格定义了多种请求方式。

方式简介常用场景
GET请求指定的资源。通常用来获取或查询资源。读取或查询资源,如获取用户列表或特定用户的详细信息。
POST向指定资源提交数据,请求服务器进行处理(如创建或修改)。数据包含在请求体中。创建新资源(如新用户、新帖子),或提交用户数据表单。
PUT用请求体中的数据替换目标资源的所有当前表示。更新现有资源的全部内容,如编辑用户的完整个人信息。
PATCH对资源应用部分修改。更新资源的一部分,如修改用户的邮箱地址或密码。
DELETE删除指定的资源。删除资源,如删除用户账户或帖子。

数据传输方式

方式介绍
URL路径参数(Path Variables通过 URL 的路径部分传递数据。在 Spring Boot 中使用 @PathVariable 注解获取。适用于 RESTful 风格的 API,例如获取特定资源的详情。
查询参数(Query Parameters通过 URL 的查询字符串(?key=value 形式)传递数据。在 Spring Boot 中使用 @RequestParam 注解获取。适用于 GETDELETE 请求。
请求体(Request Body通过 HTTP 请求的 body 部分传递数据。在 Spring Boot 中使用 @RequestBody 注解获取。适用于 POST , PUTPATCH请求,发送复杂的数据结构。

SpringBoot获取数据的方式

需要提及的是,单单从“获取数据”的角度,我们可以把DeleteGet归为一类,把PutPatchPost归为一类。

  • 前者在axios中使用params传递参数,属于Query Parameters
  • 后者在axios中使用data传递参数,属于Request Body
  • 无论是哪一种,都可以有Path Variables

在 Spring Boot(及一般的 HTTP 服务开发)中,将请求分为“GET 体系”和“POST 体系”可能会导致一些混淆,因为每种 HTTP 方法(GET、POST、PUT、PATCH、DELETE 等)都设计有其独特的用途和语义。不过,如果我们从“如何获取请求中的数据”这个角度来看,可以有一种比较宽泛的分类方式,尤其是关注于数据是通过 URL 还是请求体传递。

体系获取数据的相关注解
Path Variables@PathVariable
Get、Delete类@RequestParam@ModelAttribute
Post、Put、Patch类@RequestBody

二、代码示例

(一)Path Variables

Path Variables数据在url上,无关乎get还是post

return request({url: '/test/users/123',method: 'get'});return request({url: '/test/users/345/info',method: 'post'});
@RestController
@RequestMapping("/test")
public class CourseTestController {@GetMapping("/users/{userId}")public String getUser(@PathVariable String userId) {return "Received GET request for User ID: " + userId;}@PostMapping("/users/{userId}/info")public String updateUser(@PathVariable String userId) {return "Received POST request for User ID: " + userId;}}

(二)Get、Delete

@RequestParam

@RequestParam 主要用于将单个请求参数绑定到方法的参数上,通过指定 valuename 属性,你可以明确告诉 Spring Boot 请求参数的实际名称。

return request({url: '/users',method: 'get',params:{type:"1",status:"2",}});
	@GetMapping("/users")public String getUser(@RequestParam String type, @RequestParam(name = "status") String uerStatus) {return "Received GET request for" + type + " " + "uerStatus";}

@ModelAttribute

利用 @ModelAttribute 注解。这个注解会告诉 Spring Boot,应该将请求中的查询参数自动绑定到方法参数对象的属性上。

return request({url: '/users',method: 'get',params:{type:"1",status:"2",}});
	@GetMapping("/users")public String getUser(@ModelAttribute Query query) {return "Received GET request for" + type + " " + "uerStatus";}@Dataclass Query{String type;String status;}

通常情况下,我们会将所有的查询参数封装到一个对象中,而不是分开为两个对象,除非这两个对象在逻辑上代表着完全不同的东西,且您希望显式地区分它们。如果您确实有特定的理由需要这样做,也是可行的。比如第二个Query2表示分页查询时的分页参数

return request({url: '/users',method: 'delete',params:{type:"1",status:"2",}});
	@DeleteMapping("/users")public String deleteUser(@ModelAttribute Query1 query1, @ModelAttribute Query2 query2) {return "Received GET request for" + query1.toString() + query2.toString();}@Dataclass Query1{String type;}@Dataclass Query2{String userStatus;// 如果您希望整个对象通过 @ModelAttribute 来绑定,同时又有个别属性名不匹配// 您可以在后端对象中添加 setter 方法,并在其中处理名称不匹配的问题// 注意:Lombok @Data 注解会生成默认的 setter 方法,// 所以如果使用 Lombok,您需要手动添加一个额外的 setter 方法来处理不匹配的情况public void setStatus(String status) {this.userStatus = status;}
}

(三)Post、Put、Patch

@RequestBody

return request({url: '/users',method: 'post',data:{userId: 123,userName: "John Doe",userAge: 30,userSex: "Male"}
});
    @PostMapping("/users")public String getUser(@RequestBody UserVo userVo) {return userVo.toString();}@Dataclass UserVo{Long userId;String userName;Long userAge;String userSex;}

Spring Boot 后端的 UserVo 类中的属性名和前端传递的 JSON 对象的键名不一致时,可以使用@JsonProperty

return request({url: '/users',method: 'put',data:{userId: 123,userName: "John Doe",userAge: 32,userSex: "Male"}
});
    @PutMapping("/users")public String getUser(@RequestBody UserVo userVo) {return userVo.toString();}@Dataclass UserVo{Long userId;@JsonProperty("userName")String name;Long userAge;String userSex;}
return request({url: '/users',method: 'patch',data:{userId: 123,userAge: 34,}
});
    @PatchMapping("/users")public String getUser(@RequestBody UserVo userVo) {return userVo.toString();}@Dataclass UserVo{Long userId;@JsonProperty("userName")String name;Long userAge;String userSex;}

(四)复合型

三、特殊数据

比如文件,cookies

这篇关于SpringBoot和Axios数据的传递和接收-Restful完全版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890460

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二