文章目录

  • 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)
  • 架构风格:API 的组织方式

    • url 中使用名词表示资源及访问资源的信息,使用 / 分隔资源信息

      • http://localhost:8080/Demo/demo/100/18

        • 表示访问 /Demo/demo 地址资源 id = 100.age = 18 的记录
        • 自定义参数表示的含义
  • url 中的路径在访问相同数据类型变量时很可能会有歧义

    • 必须保证请求唯一

      • url 地址 + 请求方式 唯一
  • 需要的分页、排序等参数依然在 url 之中

    • http://localhost:8080/Demo/demos?page=18&pageSize=20

      • 与资源紧密相关的放在url中
  • 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){}
    

请求接收

  1. @PostMapping

    • 接收和处理 post 请求的方式

    • 等价于 @RequestMapping(method=RequestMethod.POST)

  2. @GetMapping

    • 支持的 get 请求方式

    • 等价于 @RequestMapping(method=RequestMethod.GET)

  3. @DeleteMapping

    • 接收 delete 方式的请求,可使用 GetMapping 代替
  4. @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 文件配置

实现

  1. application.properties 配置文件中开启使用 HiddenHttpMethodFilter 过滤器
  2. 在请求页面中包含 _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 风格请求相关推荐

  1. SpringMVC响应Restful风格请求404

    一.问题 在学习Springmvc时,使用Restful风格的url,页面提示404错误.为找到原因,编写一个简单的Restful测试用例如下: jsp页面: <a href="use ...

  2. python restful风格_总结python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法

    python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法 这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前 ...

  3. SpringMVC(三)Restful风格及实例、参数的转换

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.Restful风格 1.Restful风格的介绍 Restful 一种软件架构风格.设计风格,而不是 ...

  4. java.restful风格

    restful风格 RESTful架构,就是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. RESTful(即Representational ...

  5. springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格

    springMVC获取异步请求的参数 JQuery发送异步请求回顾 <a href="javascript:void(0);" id="testAjax" ...

  6. SpringMVC的请求-获得请求参数-Restful风格的参数的获取

    Restful是一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等. Res ...

  7. 前端请求restful风格接口怎么传参_浅谈Restful API 的请求规范

    前言 在SpringMVC架构上进行开发,开发者一直在使用jsp.valocity或者其他页面模版作为表现层面,前端工程师需要将设计师的设计图转换为静态的html页面,然后交付给后端将静态的html页 ...

  8. SpringMVC3----@Controller注解、RestFul风格的讲解和应用、SpringMVC的接受请求参数、网页跳转方式和数据回显、乱码问题

    目录 7 Controller类的写法 7.1 继承Controller接口 7.2 一个简单通过@Controller注解实现的程序. 7.3 @RequestMapping 8 RestFul风格 ...

  9. 传统请求风格 VS RestFul 风格

    RestFul 风格 概念 Restful就是一个资源定位及资源操作的风格.不是标准也不是协议,只是一种风格.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 功能 资源:互联网所有 ...

最新文章

  1. 英伟达奔驰共同发布自动驾驶系统,还自带停车功能
  2. HASH暴力破解工具-Hashcat
  3. php-ml案例,AppML 案例原型
  4. 一张图片学Python
  5. Mac下关于-您不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效。-的删除...
  6. mysql 内置功能 存储过程 目录
  7. 消息中间件系列(三):主流的消息队列中间件有哪些?
  8. vmware linux不能联网问题
  9. TokenInsight:BTC多头比例延续上升,人气保持高位
  10. 每个创始人都需要了解的来自 Y Combinator 的 13 个见解
  11. 用深度神经网络修复H漫:看完这篇你就能眼中无码
  12. 计算机话筒技术指标,麦克风
  13. 基因表达式编程(GEP)自学 第【1】天 Python 实现
  14. 递归计算 1 - 100 的和
  15. 腾讯TDSQL全时态数据库系统论文入选VLDB
  16. java多线程 占用内存_java线程池常驻线程占内存吗
  17. 命运交响曲计算机弹奏,贝多芬命运交响曲弹奏方法和介绍-雅马哈电子琴排行榜...
  18. 分组密码设计准则概论
  19. C语言娱乐项目————4、一箭双心
  20. CHIL-SQL-JOIN

热门文章

  1. KVM安装/libvirt没有启动成功找不到/var/run/libvirt/libvirt-sock
  2. android 高德地图显示标题,android学习之高德地图添加标记
  3. 【行业首发】蛙色VR全景作品支持对接飞猪旅行
  4. 计算机的冷启动与热启动
  5. python 网络通讯 plc_Python TCP通信网络编程
  6. 使用photoswipe展示图片
  7. BackTrack5 学习笔记2 常用工具
  8. matlab之ma q 模型,matlab之ARMA(p,q)模型
  9. 教你三分钟修改视频画面的尺寸大小
  10. Linux Raid相关知识