Spring REST风格

news2024/11/24 20:33:36

REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格。
当我们想要表示一个网络资源时,传统方式通常是用一个请求url表示一个操作。这样既不方便,也不安全,因为操作对于用户是透明的,可以通过地址得知要实现的是什么操作。
为了解决这样的问题,可以使用REST风格表示网络资源。
在这里插入图片描述
这样请求地址变的简单了,并且光看请求URL并不是很能猜出来该URL的具体功能。
但是我们的需求不只有保存,我们目标实现增删改查,而url只有一个,怎么办呢?
所以,REST风格访问资源时使用行为动作区分对资源进行了何种操作:

  • http://localhost/users 查询全部用户信息 GET(查询)
  • http://localhost/users/1 查询指定用户信息 GET(查询)
  • http://localhost/users 添加用户信息 POST(新增/保存)
  • http://localhost/users 修改用户信息 PUT(修改/更新)
  • http://localhost/users/1 删除用户信息 DELETE(删除)

上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范。
描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例
如:users、books、accounts…

添加示例

@Controller
public class UserController {
	//设置当前请求方法为POST,表示REST风格中的添加操作
	@RequestMapping(value = "/users",method = RequestMethod.POST)
	@ResponseBody
	public String save() {
		System.out.println("user save...");
		return "{'module':'user save'}";
	}
}

删除示例

@Controller
public class UserController {
	//设置当前请求方法为DELETE,表示REST风格中的删除操作
	@RequestMapping(value = "/users",method = RequestMethod.DELETE)
	@ResponseBody
	public String delete(Integer id) {
		System.out.println("user delete..." + id);
		return "{'module':'user delete'}";
	}
}

修改示例

@Controller
public class UserController {
	//设置当前请求方法为PUT,表示REST风格中的修改操作
	@RequestMapping(value = "/users",method = RequestMethod.PUT)
	@ResponseBody
	public String update(@RequestBody User user) {
		System.out.println("user update..." + user);
		return "{'module':'user update'}";
	}
}

根据ID查询示例

@Controller
public class UserController {
	//设置当前请求方法为GET,表示REST风格中的查询操作
	@RequestMapping(value = "/users/{id}" ,method = RequestMethod.GET)
	@ResponseBody
	public String getById(@PathVariable Integer id){
		System.out.println("user getById..."+id);
		return "{'module':'user getById'}";
	}
}

查询全部示例

@Controller
public class UserController {
	//设置当前请求方法为GET,表示REST风格中的查询操作
	@RequestMapping(value = "/users" ,method = RequestMethod.GET)
	@ResponseBody
	public String getAll() {
		System.out.println("user getAll...");
		return "{'module':'user getAll'}";
	}
}

如果value中的变量名和控制类需要的变量名不一样,或者打算传递多个参数时,可以使用@PathVariable注解
例如:
在这里插入图片描述

@Controller
public class UserController {
	//设置当前请求方法为DELETE,表示REST风格中的删除操作
	@RequestMapping(value = "/users/{id}/{name}",method = RequestMethod.DELETE)
	@ResponseBody
	public String delete(@PathVariable Integer id,@PathVariable String name)
	{
		System.out.println("user delete..." + id+","+name);
		return "{'module':'user delete'}";
	}
}

总结:
设定Http请求动作(动词):

@RequestMapping(value="",method = RequestMethod.POST|GET|PUT|DELETE)

设定请求参数(路径变量):

@RequestMapping(value="/users/{id}",method = RequestMethod.DELETE)
@ReponseBody
public String delete(@PathVariable Integer id){
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精要速览 | PacBio三代全长扩增子测序的多方向研究应用进展

随着测序技术的不断发展,组学研究愈加深入。在微生态研究领域,受限于二代测序读长的扩增子测序技术,迎来了“解放式”全面发展优化的三代测序时代——PacBio全长扩增子测序的优势逐渐显现:凭借其超长读长,高准确率&…

独立产品灵感周刊 DecoHack #044 - 新的一年如何管理你的时间

本周刊记录有趣好玩的独立产品设计开发相关内容,每周发布,往期内容同样精彩,感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到,建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。本周看到了很多时间管理的工具类型产品&…

力扣中SQL刷题

小知识点 取余数:mod(数,2) 取第一个字母:left(name,1) 或者name like ‘M%’ 196. 删除重复的电子邮箱 题型:删除列A中重复的记录,指保留列B最小的那一行记录 答案:delete t1 from 表名 t1,表名 t2 where t1.列At2…

测试——自动化测试(Selenium工具)

目录 一、自动化测试的概念以及分类 二、Selenium—web自动化测试工具 1、自动化测试的一些前置工作 2、第一个自动化实例 3、总结​编辑 三、 Selenium常用方法 定位元素的方法 元素的操作 等待 强制等待(待补充) 隐式等待(待补充&…

【python】python绘制相关性热力图

1.介绍 热力图(heatmap),又称相关系数图,根据热力图中不同方块颜色对应的相关系数的大小,可以判断出变量之间相关性的大小。热力图通过对色块着色来显示数据的统计图表。绘图时,需指定颜色映射的规则。例如…

从运营小程序到实现数字化生态闭环还差几步?

近年来,不少企业纷纷开始关注小程序的开发。对于用户来说,小程序最大的好处就是能够即点即用,体验便捷。不知你是否发现,小程序经济已经开始制约中小企业的服务与合作。 对于一般的中小企业乃至大企业里没有什么IT预算的部门&…

缺省参数!C++教你如何成为一名优秀的舔狗

👑专栏内容:C学习笔记⛪个人主页:子夜的星的主页💕座右铭:日拱一卒,功不唐捐 目录一、前言二、缺省参数1、缺省参数的定义2、缺省参数的分类Ⅰ、全缺省参数Ⅱ、半缺省参数三、注意事项1、直给中间的参数传参…

Docker中的容器命令

1、新建启动容器 docker run 镜像名 参数: -it 启动前台一个交互的终端 --name 启动容器后,赋予容器一个名字 -d: 后台运行容器,并返回容器ID,也即启动守护式容器; -P: 随机端口映射; -p: 指定端口映…

Svelte框架实现表格协同文档

首先,从框架搭建上,本篇示例采用当下流行的前后端分离的开发方式,前端使用npm作为脚手架搭建Svelte框架。 后端使用Java的SpringBoot作为后端框架。 首先,介绍下在前端Svelte框架下搭建在线表格编辑器。 1、在pageage.json文件中引入相关资源…

ANR问题分析

ANR概念 anr是指应用程序无响应,Android系统对于一些事件需要在一定时间范围内完成,如果超过预定时间未能得到有效响应或者响应时间过长,都会造成anr。通常发生anr时,系统会弹出一个提示框,让用户知道,该程…

AppScan介绍和安装

第一节-AppScan介绍和安装 1.简介 Appscan 10中文版是是全新网络安全漏洞扫描软件,软件可以直接可以对OS命令、SSRF和XXE攻击等漏洞进行检测,使得漏洞检测更加容易,提高漏洞的扫描效率。软件同时支持动态、静态、互动分析三种不同的测试功能…

OVN实验----NAT

概述 在L2互通、L3互通实验基础上通过NAT实现访问公网。 架构图如下, 这里两台逻辑路由器LR1和GLR是通过一台逻辑交换机LSjoin互连的, GLR和物理网络设备通过LSlocal相连。 物理拓扑 如上一个实验OVN实验----L2互通 逻辑拓扑 配置 开始实验前先检查…

设计模式之装饰者模式

装饰者模式 定义 先上定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。 优缺点 优点: 1,装饰器是继承的有力补充,比继承灵活,在不改…

【进阶C语言】文件操作

文章目录一.文件1.文件的功能2.文件的分类3.文件路径绝对路径相对路径4.文件信息区5.文件缓冲区6.流的概念7.输入输出二.文件函数1.打开与关闭文件打开文件——fopen返回类型参数关闭文件——fclose返回类型参数2. 顺序读写1.输入输出字符输入字符函数——fgetc返回类型函数参数…

新享科技UniPro将敏捷理念数字化 助力企业迎接2023

2023年新年伊始,“复苏”和“希望”成了越来越多国内企业和消费者的直接感受,与此同时,国际经济也从疫情中缓慢“恢复”过来,特斯拉在中国区掀起了新一轮降价风潮,而行业“销冠”比亚迪却高调发布了百万级新车。如同晴…

websocket显示实时消息

websocket实现实时消息展示 前面介绍过websocket聊天功能的实现,不清楚的可以先看下 websocket实现在线聊天 https://blog.csdn.net/qq_51076413/article/details/124644500 之前发过websocket的相关使用和一对一聊天的demo代码,这里是针对上几篇文章的补充&#x…

Nacos服务注册与发现源码剖析

文章目录前提介绍Nacos源码下载Nacos客户端源码Spring Cloud Starter Nacos 源码Nacos服务端源码前提介绍 服务注册与发现作用主要是为了更好的管理众多的服务,不论Nacos还是Zookeeper、Eureka,作为注册中心都是为了解决以下两个问题: 屏蔽…

【论文写作】英文写作工具推荐及使用教程:DeepL(翻译) + EasyEssay(扩写) + QuillBot(改写润色)

文章目录一、DeepL二、EasyEssay2.1 润写2.2 扩写2.3 生成文章2.4 英文查重三、QuillBot一、DeepL DeepL官网 DeepL的主要作用是翻译,一开始我也是在B站上看到有人推荐用这款翻译工具的,抱着试一试的心态去用了一下,感觉翻译效果真的很不错&a…

【贪心】AcWing 803. 区间选点

905. 区间选点 文章目录题目描述输入格式:输出格式:数据范围输入样例输出样例方法:贪心解题思路代码复杂度分析:题目描述 给定 N 个闭区间 [ai,bi][a_i,b_i][ai​,bi​],请你在数轴上选择尽量少的点,使得每…

利用时间序列预测电量,冷量和压缩空气量

利用时间序列预测电量,冷量和压缩空气量背景分析与思路代码结果一,电量预测二,冷量预测三,压缩空气预测调优一,电量预测(m6)二,冷量预测三,压缩空气预测背景 根据提供的数据,详见附…