创建名为spring_mvc_rest的新module,过程参考5.2节6.6节

7.1、简介

  • RESTful 也称为REST(英文:Representational State Transfer)即表现层状态传递,它是一种软件架构风格或设计风格;

  • REST 是 Roy Fielding 博士( HTTP 规范的主要编写者之一)在其2000年的博士论文中提出来的;

  • 其作用是,降低开发的复杂性、提高系统的可伸缩性;

  • 通过基于 REST 的 API 公开系统资源是一种灵活的方法,可以为不同种类的应用程序提供以标准方式格式化的数据;

  • Ajax 与 REST 之间的完美配合增加了当今人们对 REST 的注意力。

7.2、传统风格与RESTful风格

  • RESTful 风格提倡 URL 地址使用统一的风格设计,各单词之间用斜杠分开;

  • RESTful 风格不使用问号键值对的方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分;

  • RESTful 风格中不存在动词形式的路径,如updateUser表示修改用户,是一个动词,要改为名词user;

  • RESTful 风格中的路径只存在资源名称,增删改查的操作则是通过 HTTP 的请求方式来体现;

  • HTTP 协议里面,有四个表示操作方式的动词:GET、POST、PUT、DELETE;

  • 它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE用来删除资源。

操作 传统风格 REST风格
新增操作 saveUser user-->post请求方式
删除操作 deleteUser?id=1 user/1-->delete请求方式
修改操作 updateUser user-->put请求方式
查询操作 getUserById?id=1 user/1-->get请求方式

7.3、GET请求示例(不带参数)

7.3.1、页面请求示例

<a th:href="@{/user}">测试查询所有的用户信息</a>

7.3.2、控制器方法示例

    @RequestMapping(value = "/user",method = RequestMethod.GET)
public String getAllUser(){
System.out.println("查询所有的用户信息-->/user-->GET");
return "success";
}

7.3.3、测试效果

7.4、GET请求示例(带参数)

7.4.1、页面请求示例

<a th:href="@{/user/1}">测试查询id为1的用户信息</a>

7.4.2、控制器方法示例

    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
public String getUserById(@PathVariable("id") Integer id){
System.out.println("根据id查询用户信息-->/user/"+id+"-->GET");
return "success";
}

7.4.3、测试效果

7.5、POST请求示例

7.5.1、页面请求示例

<form th:action="@{/user}" method="post">
<input type="submit" value="测试新增用户信息">
</form>

7.5.2、控制器方法示例

    @RequestMapping(value = "/user",method = RequestMethod.POST)
public String insertUser(){
System.out.println("新增用户信息-->/user-->POST");
return "success";
}

7.5.3、测试效果

7.6、配置转换请求方式的过滤器

  • 实际上,浏览器只支持发送 GET 和 POST 方式的请求;

  • SpringMVC 提供的 HiddenHttpMethodFilter 可以将 POST 请求转换为 DELETE 或 PUT 请求;

  • 使用 HiddenHttpMethodFilter 将 POST 请求转换为 DELETE 或 PUT 请求,须满足两个条件:

    a、当前请求的请求方式必须为post

    b、当前请求必须传输请求参数_method

  • 满足以上条件,HiddenHttpMethodFilter 过滤器就会将当前请求的请求方式转换为请求参数_method的值,

    因此请求参数_method的值才是最终的请求方式。

注意:HiddenHttpMethodFilter过滤器的顺序,要在CharacterEncodingFilter过滤器的后面

    <!--配置处理请求方式的过滤器-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

7.7、PUT请求示例

7.7.1、页面请求示例

<form th:action="@{/user}" method="post">
<input type="hidden" name="_method" value="put">
<input type="submit" value="测试修改用户信息">
</form>

7.7.2、控制器方法示例

    @RequestMapping(value = "/user",method = RequestMethod.PUT)
public String updateUser(){
System.out.println("修改用户信息-->/user-->PUT");
return "success";
}

7.7.3、测试效果

7.8、DELETE请求示例

7.8.1、页面请求示例

<form th:action="@{/user/2}" method="post">
<input type="hidden" name="_method" value="delete">
<input type="submit" value="测试删除id为2的用户信息">
</form>

7.8.2、控制器方法示例

    @RequestMapping(value = "/user/{id}",method = RequestMethod.DELETE)
public String deleteUser(@PathVariable("id") Integer id){
System.out.println("根据id删除用户信息-->/user/"+id+"-->DELETE");
return "success";
}

7.8.3、测试效果

7.9、结合请求方式的派生注解

对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解

  • 处理get请求的派生注解-->@GetMapping

  • 处理post请求的派生注解-->@PostMapping

  • 处理put请求的派生注解-->@PutMapping

  • 处理delete请求的派生注解-->@DeleteMapping

7、SpringMVC之RESTful概述的更多相关文章

  1. SpringMVC实现RESTful服务

    SpringMVC实现RESTful服务 这里只说service,controller层的代码.Mapper层则直接继承Mapper<T>则可以,记住mybatis-config.xml一 ...

  2. 基于springMVC的RESTful服务实现

    一,什么是RESTful RESTful(RESTful Web Services)一种架构风格,表述性状态转移,它不是一个软件,也不是一个标准,而是一种思想,不依赖于任何通信协议,但是开发时要成功映 ...

  3. springmvc的RESTful风格

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

  4. 基于 springMVC 的 RESTful HTTP API 实践(服务端)

    理解 REST REST(Representational State Transfer),中文翻译叫"表述性状态转移".是 Roy Thomas Fielding 在他2000年 ...

  5. 前后端分离开发,基于SpringMVC符合Restful API风格Maven项目实战(附完整Demo)!

    摘要: 本人在前辈<从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)>一文的基础上,实现了一个基于Spring的符合REST风格的完整Demo,具有MVC分层结构并 ...

  6. 【SpringMVC】RESTful支持

    一.概述 1.1 什么是RESTful 1.2 URL的RESTful实现 二.演示 2.1 需求 2.2 第一步更改DispatcherServlet配置 2.3 第二步参数通过url传递 2.4 ...

  7. spring 3.0 应用springmvc 构造RESTful URL 详细讲解

    在线springmvc_rest demo 由于下一版本的rapid-framwork需要集成spring RESTful URL,所以研究了一下怎么搭建. 并碰到了一下问题. springmvc 3 ...

  8. springMVC学习--RESTful支持

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

  9. SpringMVC实现Restful风格的WebService

    1.环境 JDK7 MyEclipse2014 tomcat8 maven 3.3.3 spring4.1.4 2.创建maven工程 使用MyEclipse创建maven工程的方式可以参考这篇博文( ...

  10. Springmvc构造RESTful详细讲解

    Rest介绍 /blog/1 HTTP GET => 得到id = 1的blog/blog/1 HTTP DELETE => 删除 id = 1的blog/blog/1 HTTP PUT ...

随机推荐

  1. Python 将Word/ Exce/ PDF/ PPT文档转为OFD文档

    OFD(Open Fixed-layout Document )是我国自主制定的一种开放版式文件格式标准.OFD文档具有不易被篡改.格式独立.版式固定等特点,目前常用于政府公文.金融.电子发票等领域. ...

  2. 算法学习笔记(46): 离散余弦变换(DCT)

    前置知识:离散傅里叶变换 傅里叶变换在上文中更多的是 OI 中的理解以及应用.但是傅里叶变换奥秘还很多. 回顾 \(\omega_n\) 在傅里叶变换中的定义:\(e^{i \frac {2\pi} ...

  3. xxlJob Cron表达式 0 0 8,13 * * ?

    xxlJob Cron表达式  0 0 8,13 * * ? Cron有如下两种语法格式:(1)Seconds Minutes Hours DayofMonth Month DayofWeek Yea ...

  4. pytest-allure 命令生成的报告,test body 没有具体的参数和日志

    run.py: pytest.main([命令参数执行]),pytest命令执行完毕后,使用os.system()执行allure的命令 原因: 使用了命令:os.system('allure gen ...

  5. Linux 内核:设备驱动模型(2)driver-bus-device与probe

    Linux 内核:设备驱动模型(2)driver-bus-device与probe 系列:Linux 内核:设备驱动模型 学习总结 参考: https://blog.csdn.net/lizuobin ...

  6. Python 潮流周刊#58:最快运行原型的语言(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  7. 【进阶篇】Java 项目中对使用递归的理解分享

    [进阶篇]Java 项目中对使用递归的理解分享 目录 [进阶篇]Java 项目中对使用递归的理解分享 前言 一.什么是递归 1.1基本概念 1.2优缺点 1.3与迭代的区别 二.实际案例 三.改进方案 ...

  8. ABP框架开发实例教程-获取前端样式和脚本

    1.运行生成的ABP框架,设置WEB.MVC项目为启动项目,点击开始运行,界面如下,样式和脚本文件不存在,所以导致界面无法正常显示,这个我研究ABP遇到的第二个坑,第一个坑是生成数据库. 2.为什么没 ...

  9. Java常见问题-基础

    JDK版本新特性: JDK1.4 正则表达式,异常链,NIO,日志类,XML解析器,XLST转换器 JDK1.5 自动装箱.泛型.动态注解.枚举.可变长参数.遍历循环 JDK1.6 提供动态语言支持. ...

  10. Blazor Server App Cannot find the fallback endpoint specified by route values

    github官方issues中提到的解决方案,CreateBuilder时指定项目绝对路径可以解决. 1 // 指定项目路径,也可以用Assembly.GetCallingAssembly获取 2 c ...