SpringMVC第三天(RESTful)

REST风格

REST简介

REST(Representational State Transfer),表现形式状态转换

        传统风格资源描述形式

                http://localhost/user/getById?id=1

                http://localhost/user/saveUser

        REST风格描述形式

                http://localhost/user/1

                http://localhost/user

优点:

        隐藏资源的访问行为,无法通过地址得知对资源是何种操作

        书写简化

按照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...

RESTful

根据REST风格对资源进行访问称为RESTful

案例 

第一步、设定http请求动作(动词)

GET(查询)

    @RequestMapping(value = "/users",method = RequestMethod.GET)

POST(新增/保存)

    @RequestMapping(value = "/users",method = RequestMethod.POST)

PUT(修改/更新)

    @RequestMapping(value = "/users",method = RequestMethod.PUT)

DELETE(删除)

    @RequestMapping(value = "/users",method = RequestMethod.DELETE)

第二步、设定请求参数(路径变量)

    @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)@ResponseBodypublic String delete(@PathVariable Integer id){System.out.println("User " + id +"delete!");return "{'module' : 'user delete'}";}

Mybatis五种基本操作对应RESTful:

    @RequestMapping(value = "/users",method = RequestMethod.POST)@ResponseBodypublic String save(){System.out.println("User saving!");return "{'module':'user save'}";}@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)@ResponseBodypublic String delete(@PathVariable Integer id){System.out.println("User " + id +"delete!");return "{'module' : 'user delete'}";}@RequestMapping(value = "/users",method = RequestMethod.PUT)@ResponseBodypublic String update( User user){System.out.println("User updating!!");return "{'module':'user update'}";}@RequestMapping(value = "/users/{id}",method = RequestMethod.GET)@ResponseBodypublic String getById(@PathVariable Integer id){System.out.println("User " + id + "get by id" );return "{'module':'user getById'}";}@RequestMapping(value = "/users",method = RequestMethod.GET)@ResponseBodypublic String getAll(){System.out.println("User get all" );return "{'module':'user getAll'}";}

@RequestBody @RequestParam @PathVariable

区别

@RequestParam        用于接收url地址传参或表单传参

@RequestBody          用于接收json数据

@PathVariable           用于接受路径参数,使用{参数名称}描述路径参数

应用

后期开发中,发送请求参数超过一个时,以json格式为主,@RequestBody应用较广

如果发送非json格式数据,选用@RequestParam接收参数

采用RESTful进行开发,当参数数量较少时,例如一个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

RESTful简化开发

@RestController
@RequestMapping("/user")
public class UserController {@PostMappingpublic String save(){System.out.println("User saving!");return "{'module':'user save'}";}@DeleteMapping("/{id}")public String delete(@PathVariable Integer id){System.out.println("User " + id +"delete!");return "{'module' : 'user delete'}";}@PutMappingpublic String update( User user){System.out.println("User updating!!");return "{'module':'user update'}";}@GetMapping("{id}")public String getById(@PathVariable Integer id){System.out.println("User " + id + "get by id" );return "{'module':'user getById'}";}@GetMappingpublic String getAll(){System.out.println("User get all" );return "{'module':'user getAll'}";}
}

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

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

相关文章

漏洞扫描服务可以检测出哪些安全问题?

漏洞扫描服务是一种用于检测和识别计算机系统、网络和应用程序中潜在安全漏洞的服务。通过漏洞扫描,可以发现并修复各种类型的漏洞,从而提高系统的安全性。本文将介绍漏洞扫描服务可以检测出的安全问题。一、网络架构安全问题 网络架构是计算机系统的核心…

大型语言模型 (LLM)全解读

一、大型语言模型(Large Language Model)定义 大型语言模型 是一种深度学习算法,可以执行各种自然语言处理 (NLP) 任务。 大型语言模型底层使用多个转换器模型, 底层转换器是一组神经网络。 大型语言模型是使用海量数据集进行训练…

Yuliverse:引领区块链游戏新篇章!

数据源:Yuliverse Dashboard 作者:lesleyfootprint.network 什么是 Yuliverse Yuliverse 是一款元宇宙游戏的先锋,是一款主打 Explore to earn 和 Social to earn 的链游。 这是一款能让你边玩边赚钱的免费区块链游戏,得到 LI…

如何在WordPress中使用 AI 进行 SEO(12 个工具)

您想在 WordPress 中使用 AI 进行 SEO 吗? 人工智能正在对 SEO 行业产生重大影响。已经有优秀的人工智能 SEO 工具,您可以使用它们来提高您的 SEO 排名,而无需付出太多努力。 在本文中,我们将向您展示如何通过我们精心挑选的工具…

代码随想录第十八天 513 找树左下角的值 112 路径之和 106 从中序与后序遍历序列构造二叉树

LeetCode 513 找树左下角的值 题目描述 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 思路 1.确定递…

牛客竞赛算法入门题单打卡 M younik要排队

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 Younik挂好号之后,就去找医生了。但是她没想到,看医生居然也要排队! 于是younik可怜兮兮地站在大厅里,盯着墙上的显示屏,…

MySQL用户管理

1.用户 1.1 用户信息 mysql> use mysql; Database changed mysql> select host,user,authentication_string from user; --------------------------------------------------------------------- | host | user | authentication_string | --…

ubuntu 20.04 aarch64 平台交叉编译 libffi 库

前言 由于打算交叉编译 python,但是依赖 libffi 库,也就是 libffi 库也需要交叉编译 环境: ubuntu 20.04 交叉编译工具链:这里使用 musl libc 的 gcc 交叉编译工具链,aarch64-linux-musleabi-gcc,gcc 版本…

智谱AI官网再升级,GLM-4,智能体,AI作图长文档全部搞定

创建智能体 智能体体验中心 可以看到智谱AI也推出了自己的智能体,并且官方内置了丰富多样的智能体供大家免费体验。 GLM-4 原生支持自动联网、图片生成、数据分析等复杂任务,现开放体验中,快来开启更多精彩。写一篇《繁花》的影评&#xf…

[每日一题] 01.23 - 画矩形

画矩形 height,width,c,d input().split() height,width,d int(height),int(width),int(d) lis [c * width if d else c * (width - 2) c for i in range(height) ]lis: ##### # # # # ##### 或 # # # # # # # #if not d:print(c * width)for i in lis[1:-1…

编写Netty程序

编写代码 1.创建线程池 一般来说,我们会声明两个线程池,一个线程池用来处理Accept事件,一个是用于处理消息的读写事件。 // 用来处理Accept事件 EventLoopGroup bossGroup new NioEventLoopGroup(1); // 用来处理消息的读写时间 EventLoo…

1986-Minimum error thresholding

1 论文简介 《Minimum error thresholding》是由 Kittler 和 Illingworth 于 1986 年发布在 Pattern Recognition 上的一篇论文。该论文假设原始图像中待分割的目标和背景的分布服从高斯分布,然后根据最小误差思想构建最小误差目标函数,最后取目标函数最…

A - Streets of Working Lanterns - 2

警察阿纳托利再次监视一个无组织犯罪集团散布被禁止的亚洲绘画的巢穴。目前,犯罪分子还共享无线互联网,任何人都可以匿名使用。巢穴仍然只有一个入口,也是一个出口。当有人进入巢穴时,阿纳托利在他的记事本上写一个开口圆括号&…

JAVAEE初阶 网络编程(三)

TCP回显服务器 一. TCP的API二. TCP回显服务器的代码分析三. TCP回显服务器代码中存在的问题四. TCP回显服务器代码五. TCP客户端的代码六.TCP为基准的回显服务器的执行流程 一. TCP的API 二. TCP回显服务器的代码分析 这的clientSocket并不是表示用户端的层面东西,…

kubernets集群搭建

集群搭建 1.准备工作(所有节点都执行)1.1配置/etc/hosts文件1.2关闭防火墙1.3关闭selinux1.4关闭交换分区,提升性能1.5修改机器内核参数1.6配置时间同步1.7配置阿里云镜像源 2.安装docker服务(所有节点都执行)2.1安装docker服务2.2配置docker镜像加速和驱动 3.安装配…

【分布式技术】消息队列Kafka

目录 一、Kafka概述 二、消息队列Kafka的好处 三、消息队列Kafka的两种模式 四、Kafka 1、Kafka 定义 2、Kafka 简介 3、Kafka 的特性 五、Kafka的系统架构 六、实操部署Kafka集群 步骤一:在每一个zookeeper节点上完成kafka部署 ​编辑 步骤二&#xff1a…

如何在conda中的创建查询删除虚拟环境等

最近发现conda环境中有太多的虚拟环境,想要删除,重新创建管理。因此,查找资料后,记录如下: 一.创建虚拟环境 打开终端或命令提示符,并执行以下命令: bash conda create --name your_environ…

【GitHub项目推荐--微软开源的课程(Web开发课程/机器学习课程/物联网课程/数据科学课程)】【转载】

微软在 GitHub 开源了四大课程,面向计算机专业或者入门编程的同学。分别是 Web 开发课程、机器学习课程、物联网课程和数据分析课程。 四大课程在 GitHub 上共斩获 90K 的Star,每一课程包含 20 多小节,完成课程大约需要 12 周。每小节除了视…

中文自然语言处理(NLP)的命名实体识别(NER)任务常见序列标注方法

中文NLP的NER任务中的数据集序列标注方法,主要有以下几种常用的标注方案: BIO标注法(Begin-Inside-Outside): B(Begin)表示实体的开始部分。I(Inside)表示实体的中间部分…