当前位置: 首页 > news >正文

Spring Boot中的RESTful API详细介绍及使用

在Spring Boot中,RESTful API的实现通过控制器类中的方法和特定的注解来完成。每个注解对应不同的HTTP请求方法,并通过处理请求参数和返回响应来实现不同的操作。

下面将详细解释RESTful API中的各个方面,包括@GetMapping, @PostMapping, @PutMapping, 和 @DeleteMapping的作用及区别、请求参数和返回参数。

作用及区别

  1. @GetMapping:

    • 作用: 处理HTTP GET请求,用于获取资源。通常用于读取数据,不应更改服务器上的资源。
    • 区别: 是幂等的,多次请求相同资源不会改变服务器状态。
    • 示例:
      @GetMapping("/users")
      public List<User> getAllUsers() {// 获取所有用户
      }@GetMapping("/users/{id}")
      public User getUserById(@PathVariable Long id) {// 获取指定ID的用户
      }
      
  2. @PostMapping:

    • 作用: 处理HTTP POST请求,用于创建新资源。通常用于提交数据,服务器会创建新的资源。
    • 区别: 不是幂等的,多次请求会创建多个资源。
    • 示例:
      @PostMapping("/users")
      public User createUser(@RequestBody User user) {// 创建新用户
      }
      
  3. @PutMapping:

    • 作用: 处理HTTP PUT请求,用于更新资源。通常用于更新现有资源的全部内容。
    • 区别: 是幂等的,多次请求相同资源会导致相同的更新结果。
    • 示例:
      @PutMapping("/users/{id}")
      public User updateUser(@PathVariable Long id, @RequestBody User user) {// 更新指定ID的用户
      }
      
  4. @DeleteMapping:

    • 作用: 处理HTTP DELETE请求,用于删除资源。通常用于删除服务器上的资源。
    • 区别: 是幂等的,多次请求相同资源删除操作只会导致资源被删除一次。
    • 示例:
      @DeleteMapping("/users/{id}")
      public void deleteUser(@PathVariable Long id) {// 删除指定ID的用户
      }
      

请求参数

  1. @RequestBody:

    • 作用: 将请求体中的JSON数据绑定到方法参数上。
    • 使用场景: 常用于@PostMapping@PutMapping
    • 示例:
      @PostMapping("/users")
      public User createUser(@RequestBody User user) {// 请求体中的JSON数据将绑定到user对象
      }
      
  2. @PathVariable:

    • 作用: 将URL路径中的变量绑定到方法参数上。
    • 使用场景: 常用于@GetMapping, @PutMapping, 和 @DeleteMapping
    • 示例:
      @GetMapping("/users/{id}")
      public User getUserById(@PathVariable Long id) {// URL中的id将绑定到方法参数id
      }
      
  3. @RequestParam:

    • 作用: 将查询参数绑定到方法参数上。
    • 使用场景: 适用于各种HTTP方法。
    • 示例:
      @GetMapping("/users")
      public List<User> getUsersByAge(@RequestParam int age) {// URL中的查询参数age将绑定到方法参数age
      }
      

返回参数

  1. 返回对象:

    • 作用: 方法可以直接返回对象,Spring Boot会自动将其转换为JSON格式。
    • 示例:
      @GetMapping("/users/{id}")
      public User getUserById(@PathVariable Long id) {// 返回User对象,自动转换为JSON
      }
      
  2. ResponseEntity:

    • 作用: 可以自定义HTTP响应状态码、响应头和响应体。
    • 示例:
      @PostMapping("/users")
      public ResponseEntity<User> createUser(@RequestBody User user) {User createdUser = userService.createUser(user);return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);
      }
      

综合示例

@RestController
@RequestMapping("/api/users")
public class UserController {@GetMappingpublic List<User> getAllUsers() {// 获取所有用户return userService.findAll();}@GetMapping("/{id}")public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.findById(id);if (user == null) {return ResponseEntity.notFound().build();}return ResponseEntity.ok(user);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User createdUser = userService.createUser(user);return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);}@PutMapping("/{id}")public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {User updatedUser = userService.updateUser(id, user);if (updatedUser == null) {return ResponseEntity.notFound().build();}return ResponseEntity.ok(updatedUser);}@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable Long id) {userService.deleteUser(id);return ResponseEntity.noContent().build();}
}

总结

Spring Boot中的RESTful API通过使用@GetMapping, @PostMapping, @PutMapping, 和 @DeleteMapping注解,使得每种HTTP请求类型都能简便地映射到控制器的方法上。

通过@RequestBody, @PathVariable, 和 @RequestParam处理请求参数,并利用返回对象或ResponseEntity构建响应,使得RESTful API的开发变得高效且易维护。

相关文章:

Spring Boot中的RESTful API详细介绍及使用

在Spring Boot中&#xff0c;RESTful API的实现通过控制器类中的方法和特定的注解来完成。每个注解对应不同的HTTP请求方法&#xff0c;并通过处理请求参数和返回响应来实现不同的操作。 下面将详细解释RESTful API中的各个方面&#xff0c;包括GetMapping, PostMapping, PutMa…...

nlp学习笔记

目录 很多入门例子 bert chinese 很多入门例子 https://github.com/lansinuote/Huggingface_Toturials bert chinese import torch import torch.nn as nn from transformers import AutoTokenizer, AutoModel, BertModel, TFBertModel, BertTokenizer# youpath = D:/bert-…...

使用python获取内存信息

#!/usr/bin/python # -*- coding:utf-8 -*- psutil模块是一个跨平台的获取进程和系统应用情况&#xff08;CPU&#xff0c;内存&#xff0c;磁盘&#xff0c;网络&#xff0c;传感器&#xff09;的库。 该模块用于系统监控、限制进程资源和运行进程的管理等方面。 内存信息&am…...

外包公司泛滥,这些常识你应该提前知道?

今年大环境确实很不好 很多985,211的应届生都在网上大吐苦水&#xff0c;很多大龄离职大厂的技术人也好&#xff0c;业务人也好&#xff0c;都纷纷转向短视频平台做起了自媒体。而找工作的人普遍发现&#xff0c;某最火的招聘平台几乎都被外包公司刷屏了。大大小小的外包公司如…...

Linux下的抓包工具使用介绍

应用层 传输层 网络层 数据链路层 物理层 1&#xff09;tcpdump&#xff08;传输&#xff0f;网络层&#xff09; tcpdump -i eth0 tcpdump -i eth0 -vnn -v&#xff1a;显示包含有TTL&#xff0c;TOS值等等更详细的信息 -n&#xff1a;不要做IP解析为主机名 -nn&#xff1a;…...

centos环境上:k8s 简单安装教程

本次演示安装3节点k8s环境&#xff0c;无需多言&#xff0c;直接上操作步骤&#xff1a; 1、环境准备 k8s部署前&#xff0c;首先需要准备好环境&#xff0c;除了1.4 步骤&#xff0c;其他步骤在所有&#xff08;3个&#xff09;节点上都要执行&#xff1a; 1.1 关闭防火墙 s…...

短视频矩阵系统/源码搭建---拆解热门视频功能开发上线

短视频矩阵系统/源码搭建 一、短视频矩阵系统源码开发需要用到以下技术&#xff1a; 1.前端技术&#xff1a;HTML、CSS、JavaScript、Vue.js等前端框架。 2.后端技术&#xff1a;Java、Python、PHP等后端语言及相关框架&#xff0c;如Spring Boot、Django、Laravel等。 3.移…...

手机和模拟器的 Frida 环境配置

目录 一、配置 JDK 和 android 环境 二、连接设备和查看权限 1、连接设备 2、查看手机权限 三、手机配置 Frida 1、frida-server下载 2、验证 四、模拟器配置 Frida 1、下载模拟器并调节成手机版&#xff1a; 2、连接并查看架构 3、配置并开启 x86 的 frida-serve…...

力扣1385.两个数组间的距离值

力扣1385.两个数组间的距离值 二分判断答案是否正确 class Solution {public:int findTheDistanceValue(vector<int>& arr1, vector<int>& arr2, int d) {ranges::sort(arr2);ranges::sort(arr1);int m arr2.size();auto check [&](int low,int h…...

[C++] 小游戏 斗破苍穹 2.11.6 版本 zty出品

大家好&#xff0c;今天zty带来的是斗破苍穹的 2.11.6 版本&#xff0c;这个版本主要更新了&#xff1a;1、背包 2、将退出游戏改到了设置里面 3、如果不逃跑不会停止战斗。废话不多说&#xff0c; 先赞后看 养成习惯 code #include<stdio.h> #include<iostrea…...

认识与学习JSP

JSP核心技术 什么是JSP JSP全称是Java Server Pages&#xff0c;它和servle技术一样&#xff0c;都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet JSP这门技术的最大的特点在于&#xff0c;写jsp就像在写html&#xff0c;但它相比htm…...

MySql 各种 join

MySql 定义了很多join的方式&#xff0c;接下来我们用一个例子来讲解。 用到的表 本文用到了两个表s1,s2&#xff1a; 内外连接 测试 1 1 1.select * from s1 inner join s2 on(s1.id s2.id);&#xff1a; -------- | id | id | -------- | 3 | 3 | | 4 | 4 | --------2…...

【Android面试八股文】Android中操作多线程的方式有哪些?

文章目录 1. 使用 `Thread` 和 `Runnable`2. `AsyncTask`3. `Handler` 和 `Looper`4. `HandlerThread`5. `ThreadPoolExecutor`6. `IntentService`7. `RxJava`8. `Coroutine`(协程)9. `WorkManager`在Android开发中,有多种方式可以进行多线程操作。以下是主要的几种方式: 1…...

语义分割和目标检测的关系

目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 &#xff08;1&#xff09;物体的位置 &#xff08;2&#xff09;物体的分类 从数据格式来说 (1&#xff09;语义分割的数据格式 (2&#xff09;目标检测的数据格式 1.语义分…...

SpringBoot 大文件基于md5实现分片上传、断点续传、秒传

SpringBoot 大文件基于md5实现分片上传、断点续传、秒传 SpringBoot 大文件基于md5实现分片上传、断点续传、秒传前言1. 基本概念1.1 分片上传1.2 断点续传1.3 秒传1.4 分片上传的实现 2. 分片上传前端实现2.1 什么是WebUploader&#xff1f;功能特点接口说明事件APIHook 机制 …...

数据资产治理与数据质量提升:构建完善的数据治理体系,确保数据资产的高质量与准确性

一、引言 随着信息技术的迅猛发展&#xff0c;数据已经成为企业和社会发展的重要资产。然而&#xff0c;数据资产的有效治理与数据质量的提升&#xff0c;是企业实现数字化转型、提升竞争力的关键。本文旨在探讨数据资产治理与数据质量提升的重要性&#xff0c;并提出构建完善…...

SylixOS下UDP组播测试程序

SylixOS下UDP组播测试 测试效果截图如下: udp组播发送测试程序。 /********************************************************************************************************* ** ** 中国软件开源组织 ** ** …...

Web前端快速开发平台:革命性工具,提升开发效率的新篇章

Web前端快速开发平台&#xff1a;革命性工具&#xff0c;提升开发效率的新篇章 在数字化时代的浪潮中&#xff0c;Web前端技术的快速发展与变革正在重塑我们的数字世界。为了应对这种快速变化&#xff0c;Web前端快速开发平台应运而生&#xff0c;为开发者们提供了更加高效、便…...

内窥镜系统设计简介

内窥镜系统设计简介 1. 源由2. 系统组成2.1 光学系统2.2 机械结构2.3 电子系统2.4 软件系统2.5 安全性和合规性2.6 研发与测试2.7 用户培训与支持 3. 研发过程3.1 光学系统Step 1&#xff1a;镜头设计Step 2&#xff1a;光源Step 3&#xff1a;成像传感器 3.2 机械结构Step 1&a…...

使用Spring Boot实现Redis多数据库缓存

Redis多数据库存储实现用户行为缓存 在我的系统中&#xff0c;为了优化用户行为数据的存储与访问效率&#xff0c;我引入了Redis缓存&#xff0c;并将数据分布在不同的Redis数据库中。通过这种方式&#xff0c;可以减少单一数据库的负载&#xff0c;提高系统的整体性能。 主要…...

无限级数求和的Java实现与数学分析

本文旨在详细说明如何使用Java精确计算特定形式的无限级数 S -(2x)^2/2&#xff01; (2x)^4/4&#xff01; - (2x)^6/6&#xff01; ... 在指定区间 [0.1, 1.5] 内部和。我们将深入分析等级数的数学性质&#xff0c;推导其闭合形式&#xff0c;并在此基础上纠正原始Java代码…...

第10章 RTOS 感知调试(OpenOCD)

第10章 RTOS 感知调试 导读:在嵌入式开发中,RTOS(实时操作系统)的使用非常普遍。然而当多个线程并发执行时,传统的单线程调试方式无法感知任务切换和线程上下文,给问题定位带来极大困难。OpenOCD 内置了对十余种主流 RTOS 的线程感知调试支持,能够在暂停目标时自动识别所…...

别再只用交叉熵了!医疗AI中疾病分级任务,试试PyTorch实现这个序数回归损失函数

医疗AI中的序数回归&#xff1a;超越交叉熵的疾病分级新范式 在医疗人工智能领域&#xff0c;我们经常遇到需要预测疾病严重程度分级的任务——从轻度到中度再到重度&#xff0c;这些类别之间存在明确的递进关系。传统做法是直接套用交叉熵损失函数&#xff0c;但这就像用尺子测…...

避坑指南:在RV1103B上为SC132GS摄像头添加设备树节点的正确姿势

RV1103B平台SC132GS摄像头设备树配置实战指南 1. 瑞芯微RV1103B平台摄像头开发概述 在嵌入式视觉系统开发中&#xff0c;瑞芯微RV1103B凭借其出色的图像处理能力和低功耗特性&#xff0c;成为工业视觉、智能门铃等场景的热门选择。SC132GS作为一款高性价比的1/3英寸CMOS传感器&…...

ollama-QwQ-32B量化部署:在4GB内存设备运行OpenClaw的配置

ollama-QwQ-32B量化部署&#xff1a;在4GB内存设备运行OpenClaw的配置 1. 为什么要在低配设备上折腾大模型&#xff1f; 去年冬天&#xff0c;我在树莓派上第一次尝试部署OpenClaw时&#xff0c;被现实狠狠教育了一顿——32GB内存的笔记本跑得飞起&#xff0c;换到4GB的树莓派…...

BilibiliDown:突破B站视频下载限制的革新性工具

BilibiliDown&#xff1a;突破B站视频下载限制的革新性工具 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/Bili…...

如何快速解放双手:MaaYuan游戏日常任务自动化完整指南

如何快速解放双手&#xff1a;MaaYuan游戏日常任务自动化完整指南 【免费下载链接】MaaYuan 代号鸢 / 如鸢 一键长草小助手 项目地址: https://gitcode.com/gh_mirrors/ma/MaaYuan 厌倦了每天花费大量时间在重复的游戏日常任务上吗&#xff1f;MaaYuan作为一款免费开源的…...

OV2640摄像头模块实战指南:从硬件连接到图像处理

1. OV2640摄像头模块初探&#xff1a;为什么选择它&#xff1f; 第一次接触OV2640摄像头模块时&#xff0c;我被它的小巧身材和强大性能惊艳到了。这个只有指甲盖大小的模块&#xff0c;居然能输出200万像素的高清图像&#xff0c;而且功耗低到能让电池供电设备连续工作数小时。…...

终极指南:如何在ComfyUI中掌握IPAdapter Plus图像风格迁移技术

终极指南&#xff1a;如何在ComfyUI中掌握IPAdapter Plus图像风格迁移技术 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 在AI图像生成领域&#xff0c;ComfyUI IPAdapter Plus插件正在成为图像风格迁…...

【华为OD机试真题】手牌接龙 · 最大出牌次数(C++)

一、真题题目描述&#xff1a;手里给一副手牌&#xff0c;数字从0-9&#xff0c;有(红色)&#xff0c;g(绿色)&#xff0c;b(蓝色)&#xff0c;y(黄色)四种颜色&#xff0c;出牌规则为每次打出的牌必须跟上一张的数 字或者颜色相同&#xff0c;否则不能抽选。 选手应该怎么选才…...