Restful 风格请求
文章目录
- RESTful
- REST
- 注解
- @RestController
- @PathVariable
- 请求接收
- controller 类示例
- put、delete
RESTful
RESTful
:接口架构风格- 接口(API):可以指 servlet、controller 的 url、调用其他程序的函数等
- 互联网软件架构设计的一种风格,但不是标准
- 提出了一组客户端和服务器交互时的架构理念和设计原则
- 基于这种理念和原则设计的接口可以更简洁、更有层次
- 任何技术都可以实现这种理念
- 一个架构符合 REST 原则就称为 RESTful 架构
- 传统风格
- 传统 url 使用 get 方式传递参数:参数使用 ? 追加在 url 之后
- 提出了一组客户端和服务器交互时的架构理念和设计原则
REST
REST:Representational State Transfer
表现层状态转移
- 即视图层:显示资源,通过视图页面 jsp 等显示操作资源的结果
状态转移:资源的状态变化
- 比如:创建资源、创建后可以查询看到资源内容,可以被修改,可以删除
即使用 url 表示资源,使用 http 动作操作资源
REST 中的要素
- 利用 REST 表示资源和对资源的操作
- 互联网中对资源或操作使用 url 表示,
- 资源使用名词表示
- 使用 HTTP 中的动作(请求方式)表示对资源的操作(CRUD)
- 利用 REST 表示资源和对资源的操作
架构风格:API 的组织方式
url 中使用名词表示资源及访问资源的信息,使用 / 分隔资源信息
- http://localhost:8080/Demo/demo/100/18
- 表示访问
/Demo/demo
地址资源id = 100.age = 18
的记录 - 自定义参数表示的含义
- 表示访问
- http://localhost:8080/Demo/demo/100/18
url 中的路径在访问相同数据类型变量时很可能会有歧义
- 必须保证请求唯一
url 地址 + 请求方式
唯一
- 必须保证请求唯一
需要的分页、排序等参数依然在 url 之中
- http://localhost:8080/Demo/demos?page=18&pageSize=20
- 与资源紧密相关的放在url中
- http://localhost:8080/Demo/demos?page=18&pageSize=20
GET:请求资源,POST:创建资源
- 直接支持,主要使用
<!-- 请求资源 --> <!-- 处理单个资源:demo 单数方式查询 id=1,age=22 的记录 --> http://localhost:8080/Demo/demo/1/22 <!-- 处理多个资源:demos 复数形式查询 id=1或2 的记录 --> http://localhost:8080/Demo/demos/1/2<!-- 增加记录 --> http://localhost:8080/Demo/demo <!-- 在请求中传递数据 --> <form action="http://localhost:8080/Demo/demo" methon="post">姓名:<input type="text" name="name"/>年龄:<input type="text" age="18"/> </form>
PUT:更新资源,DELETE:删除资源;默认直接不支持
<!-- 更新资源 --> http://localhost:8080/Demo/demo <!-- 在请求中传递数据 --> <form action="http://localhost:8080/Demo/demo" methon="post">姓名:<input type="text" name="name"/>年龄:<input type="text" age="18"/><!-- 声明使用 put 请求处理资源 --><input type="hidden" name="_method" value="PUT"> </form><!-- 删除资源:自定义接收对应请求与参数类型的处理方式 --> <a href="http://localhost:8080/Demo/demo/1">删除记录id=1</a>
注解
- Spring 开发 RESTful 主要是几个注解实现
@RestController
@Controller
和@ResponseBody
的复合注解在类定义使用
@RestController
- 表示当前类所有方法都添加了
@ResponseBody
注解 - 使用等价于
@Controller
- 表示当前类所有方法都添加了
@PathVariable
获取
url
中的数据- 实现
RESTful
最主要的注解
- 实现
注解在方法形参前
- 请求
url
中使用占位符{变量名}
表示参数 - 注解属性
value = "变量名"
将路径变量赋值给被注解的形参- 路径变量名和形参名一致时可省略 value
// RestFul 风格参数接收 @GetMapping("/demo/{name}/{age}") public void test(@PathVariable(value = "name") String name, @PathVariable(value = "age") Integer age){}
- 请求
请求接收
@PostMapping
接收和处理 post 请求的方式
等价于
@RequestMapping(method=RequestMethod.POST)
@GetMapping
支持的 get 请求方式
等价于
@RequestMapping(method=RequestMethod.GET)
@DeleteMapping
- 接收 delete 方式的请求,可使用 GetMapping 代替
@PutMapping
- 支持 put 请求方式
controller 类示例
package springboot_mybatis.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import springboot_mybatis.service.DemoService;import javax.annotation.Resource;
//注解表示此类是 controller,且所有方法添加 @ResponseBody 返回数据对象
@RestController
public class MyController {@Resourceprivate DemoService demoService;// 请求方式 + url 必须保证唯一以准确获取资源/*** 查询记录* @GetMapping get方式处理请求* {id}:url 路径中的变量* url相当于 http://localhost:8080/doGet/100* @PathVariable 将路径变量赋值到形参 id* @param id 记录 id* @return 返回结果数据*/@GetMapping("/doGet/{id}")public String doGet(@PathVariable("id") Integer id){return demoService.getById(100).toString();}/*** post 请求添加记录* url相当于 http://localhost:8080/doPost/{name}/{age}* @param age age* @param name name* @return 返回结果数据*/@PostMapping("/doPost/{name}/{age}")public String doPost(@PathVariable("name") String name,@PathVariable("age") Integer age){return "添加记录 name = " + name + ";age = " + age;}}
put、delete
- 在页面或 Ajax 中支持 put、delete 请求
- 默认页面不支持 put、delete
- SpringMVC 中有过滤器支持将 post 转为 put、delete
- SpringMVC 中需要在 web.xml 文件配置
实现
- application.properties 配置文件中开启使用
HiddenHttpMethodFilter
过滤器 - 在请求页面中包含 _method 参数,值为 put 或 delete
- 发起请求使用 post 方法
# 启用支持 put、delete
spring.mvc.hiddenmethod.filter.enabled=true
<body><form actoin="demo/test" method="post"><!-- 隐藏域,声明使用 put 请求 --><input type="hidden" name="_method" value="PUT"/><input type="submot" value="测试put请求"/></form><form actoin="demo/test" method="post"><!-- 隐藏域,声明使用 delete 请求 --><input type="hidden" name="_method" value="delete"/><input type="submot" value="测试put请求"/></form>
</body>
Restful 风格请求相关推荐
- SpringMVC响应Restful风格请求404
一.问题 在学习Springmvc时,使用Restful风格的url,页面提示404错误.为找到原因,编写一个简单的Restful测试用例如下: jsp页面: <a href="use ...
- python restful风格_总结python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法 这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前 ...
- SpringMVC(三)Restful风格及实例、参数的转换
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Restful风格 1.Restful风格的介绍 Restful 一种软件架构风格.设计风格,而不是 ...
- java.restful风格
restful风格 RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. RESTful(即Representational ...
- springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格
springMVC获取异步请求的参数 JQuery发送异步请求回顾 <a href="javascript:void(0);" id="testAjax" ...
- SpringMVC的请求-获得请求参数-Restful风格的参数的获取
Restful是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等. Res ...
- 前端请求restful风格接口怎么传参_浅谈Restful API 的请求规范
前言 在SpringMVC架构上进行开发,开发者一直在使用jsp.valocity或者其他页面模版作为表现层面,前端工程师需要将设计师的设计图转换为静态的html页面,然后交付给后端将静态的html页 ...
- SpringMVC3----@Controller注解、RestFul风格的讲解和应用、SpringMVC的接受请求参数、网页跳转方式和数据回显、乱码问题
目录 7 Controller类的写法 7.1 继承Controller接口 7.2 一个简单通过@Controller注解实现的程序. 7.3 @RequestMapping 8 RestFul风格 ...
- 传统请求风格 VS RestFul 风格
RestFul 风格 概念 Restful就是一个资源定位及资源操作的风格.不是标准也不是协议,只是一种风格.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 功能 资源:互联网所有 ...
最新文章
- 英伟达奔驰共同发布自动驾驶系统,还自带停车功能
- HASH暴力破解工具-Hashcat
- php-ml案例,AppML 案例原型
- 一张图片学Python
- Mac下关于-您不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效。-的删除...
- mysql 内置功能 存储过程 目录
- 消息中间件系列(三):主流的消息队列中间件有哪些?
- vmware linux不能联网问题
- TokenInsight:BTC多头比例延续上升,人气保持高位
- 每个创始人都需要了解的来自 Y Combinator 的 13 个见解
- 用深度神经网络修复H漫:看完这篇你就能眼中无码
- 计算机话筒技术指标,麦克风
- 基因表达式编程(GEP)自学 第【1】天 Python 实现
- 递归计算 1 - 100 的和
- 腾讯TDSQL全时态数据库系统论文入选VLDB
- java多线程 占用内存_java线程池常驻线程占内存吗
- 命运交响曲计算机弹奏,贝多芬命运交响曲弹奏方法和介绍-雅马哈电子琴排行榜...
- 分组密码设计准则概论
- C语言娱乐项目————4、一箭双心
- CHIL-SQL-JOIN
热门文章
- KVM安装/libvirt没有启动成功找不到/var/run/libvirt/libvirt-sock
- android 高德地图显示标题,android学习之高德地图添加标记
- 【行业首发】蛙色VR全景作品支持对接飞猪旅行
- 计算机的冷启动与热启动
- python 网络通讯 plc_Python TCP通信网络编程
- 使用photoswipe展示图片
- BackTrack5 学习笔记2 常用工具
- matlab之ma q 模型,matlab之ARMA(p,q)模型
- 教你三分钟修改视频画面的尺寸大小
- Linux Raid相关知识