【spring springmvc】这里有你想要的SpringMVC的REST风格的四种请求方式
概述
之前的文章springmvc使用注解声明控制器与请求映射有简单提到过控制器与请求映射,这一次就详细讲解一下SpringMVC的REST风格的四种请求方式及其使用方法。
你能get的知识点
1、什么是Rest风格?
2、基于springmvc实现REST风格的四种请求方式
3、post请求转换为delete与put请求
4、解决请求乱码问题
5、RequestMapping注解的属性
@

壹:rest风格
一:什么是Rest风格?
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
简单来说:使用URL定位资源,用HTTP动词(例如GET,POST,DELETE,DETC等)描述操作。
二:REST风格的四种请求方式
| 请求 | 说明 | 用于 | 例子 | 例子说明 |
|---|---|---|---|---|
| @GetMapping | 匹配GET方式的请求; | 一般用于读取数据 | /user/1 | 获取一号用户信息 |
| @PostMapping | 匹配POST方式的请求; | 一般用于新增数据 | /user/1 | 新增一号用户 |
| @PutMapping | 匹配PUT方式的请求; | 一般用于更新数据 | /user/1 | 修改一号用户 |
| @DeleteMapping | 匹配DELETE方式的请求; | 一般用于删除数据 | /user/1 | 删除一号用户 |
也就是说,我们不再使用/user/getuser?user=1、/user/deleteuser?user=1等来区分使用者的行为操作,而是使用不同的请求方式来描述行为。
贰:基于springmvc实现REST风格的四种请求方式
Spring框架的4.3版本后,引入了新的组合注解,来帮助简化常用的HTTP方法的映射,并更好的表达被注解方法的语义。
@GetMapping = @requestMapping(method = RequestMethod.GET)。
@PostMapping = @requestMapping(method = RequestMethod.POST)。
@DeleteMapping = @requestMapping(method = RequestMethod.DELETE)。
@PutMapping = @requestMapping(method = RequestMethod.PuT)。
一:@GetMapping请求
以@GetMapping为例,该组合注解是@RequestMapping(method = RequestMethod.GET)的缩写,它会将HTTP GET请求映射到特定的处理方法上。
RequestMapping后所有属性都是可选的,但其默认属性是value。当value是其唯一属性时,可以省略属性名。
@RequestMapping(value = "/rest",method = RequestMethod.GET)
public String restGet(){
System.out.println("Get请求,hello.....");
return "hello";
}
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
所以我们可以将以上代码简单的写成:
@GetMapping("/rest")
public String restGet(){
System.out.println("Get请求,hello.....");
return "hello";
}
二:@PostMapping请求
@PostMapping("/rest")
public String restPost(){
System.out.println("Post请求,hello.....");
return "hello";
}
三:@DeleteMapping请求
@DeleteMapping("/rest")
public String restDelete(){
System.out.println("Delete请求,hello.....");
return "redirect:rest";
}
四:@PutMapping请求
@PutMapping("/rest")
public String restPut(){
System.out.println("Put请求,hello.....");
return "redirect:rest";
}
叁:问题
一:post请求转换为delete与put请求
由于form表单只支持GET和POST请求,而不支持DELETE和PUT等请求方式,所以我们实现delete和put请求往往会报错找不到方法。
Spring提供了一个过滤器HiddenHttpMethodFilter,可以将DELETE和PUT请求转换为标准的HTTP方式,即能将POST请求转为DELETE或PUT请求。
具体实现:在web.xml文件中配置过滤器HiddenHttpMethodFilter
<!--使用Rest风格的URI,将页面普通的post请求转为delete或者put请求-->
<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>
注意:delete和put请求最好使用Redirect(重定向),不然会报404错误。
二:解决请求乱码问题
<!-- 解决乱码问题-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:编码的过滤器应该放在所有的过滤器前,否则不生效
肆:RequestMapping注解的属性
| 属性名 | 类型 | 描述 |
|---|---|---|
| name | String | 可选属性,用于为映射地址指定别名。 |
| value | String[] | 可选属性,同时也是默认属性,用于映射一-个请求和一种方法,可以标注在一-个方法或一个类上。 |
| method | RequestMethod[] | 可选属性,用于指定该方法用于处理哪种类型的请求方式,其请求方式包括GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE和TRACE例如method=RequestMethod.GET表示只支持GET请求,如果需要支持多个请求方式则需要通过{}写成数组的形式,并且多个请求方式之间是有英文逗号分隔。 |
| params | String[] | 可选属性,用于指定Request中必须包含某些参数的值,.才可以通过其标注的方法处理。 |
| headers | String[] | 可选属性,用于指定Request中必须包含某些指定的header的值,才可以通过其标注的方法处理。。 |
| consumes | String[] | 可选属性,用于指定处理请求的提交内容类型(Content-type),比如application/json,text/html等。 |
| produces | String[] | 可选属性,用于指定返回的内容类型,返回的内容类型必,须是request请求头(Accept)中所包含的类型。 |
表中所有属性都是可选的,但其默认属性是value。当value是其唯一属性时, 可以省略属性名。
例如,下面两种标注的含义相同:
@RequestMapping(value="/rest")
@RequestMapping("/rest")
伍:测试
新建index.html文件,加入以下代码。新建hello.html,用于请求后的页面跳转。
<h2>各种请求</h2>
<a href="rest">hello Get请求</a>
<form action="rest" method="post">
<button type="submit">hello Post请求</button>
</form>
<form action="rest" method="post">
<input type="hidden" name="_method" value="delete">
<button type="submit">hello Delete请求</button>
</form>
<form action="rest" method="post">
<input type="hidden" name="_method" value="put">
<button type="submit">hello put请求</button>
</form>
结果:

【spring springmvc】这里有你想要的SpringMVC的REST风格的四种请求方式的更多相关文章
- SpringMVC的REST风格的四种请求方式
一. 在HTTP 协议里面,四个表示操作方式的动词:GET.POST.PUT.DELETE. ·它们分别对应四种基本操作: 1.GET ====== 获 取资源 2.POST ======新建资源 ...
- 读书笔记——spring cloud 中 HystrixCommand的四种执行方式简述
读了<Spring Cloud 微服务实战>第151-154页, 总结如下: Hystrix存在两种Command,一种是HystrixCommand,另一种是HystrixObserva ...
- spring security四种实现方式
spring security四种实现方式 spring(20) > 目录(?)[+] 最简单配置spring-securityxml实现1 实现UserDetailsService 实现动态过 ...
- SpringMVC 学习 十一 springMVC控制器向jsp或者别的控制器传递参数的四种方法
以后的开发,大部分是发送ajax,因此这四种传递参数的方法,并不太常用.作为了解吧 第一种:使用原生 Servlet 在控制器的响应的方法中添加Servlet中的一些作用域:HttpRequestSe ...
- 【Spring】12、Spring Security 四种使用方式
spring security使用分类: 如何使用spring security,相信百度过的都知道,总共有四种用法,从简到深为:1.不用数据库,全部数据写在配置文件,这个也是官方文档里面的demo: ...
- Spring中bean的四种注入方式
一.前言 最近在复习Spring的相关内容,这篇博客就来记录一下Spring为bean的属性注入值的四种方式.这篇博客主要讲解在xml文件中,如何为bean的属性注入值,最后也会简单提一下使用注解 ...
- SpringMVC(四) RequestMapping请求方式
常见的Rest API的Get和POST的测试参考代码如下,其中web.xml和Springmvc的配置文件参考HelloWorld测试代码中的配置. 控制类的代码如下: package com.ti ...
- Spring Data Jpa的四种查询方式
一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaR ...
- spring AOP 代理机制、执行过程、四种实现方式及示例详解
1.加载过程 spring首先检测配置文件中的代理配置,然后去加载bean; 如果配置文件中没有配置代理,自然代理不会生效,如果配置了代理,但是代理还没有生效,那么有可能是加载顺序的问题,即在检测到代 ...
随机推荐
- TableViewComponent v2
Unity UGUI 自带的 ScrollView 控件不支持复用滚动内容,在数量大的情况下,界面容易卡顿 借鉴其他游戏控件,写了个可复用的滚动组件,扩展.优化了ScrollView TableVie ...
- Git学习笔记(二) · 非典型性程序猿
远程库的使用 前面说到的都是git在本地的操作,那么实际协作开发过程中我们肯定是要有一个远程版本库作为项目的核心版本库,也就是投入生产使用的版本.这里我们以 Github为例.Github是一个开放的 ...
- Golang/Python/PHP带你彻底学会gRPC
目录 一.gRPC是什么? 二.Protocol Buffers是什么? 三.需求:开发健身房服务 四.最佳实践 Golang 1. 安装protoc工具 2. 安装protoc-gen-go 3. ...
- 一步到位datatabls中文化
#一步到位datatabls中文化 加入以下代码 $(document).ready(function () { $('#declarationList').DataTable({ destroy:t ...
- Python 安全修改私有属性
设置私有属性之后,如何修改私有属性 class Room: def __init__(self,name,length,width): self.__name = name self.__length ...
- js中如何判断属性是对象实例中的属性还是原型中的属性
ECMAScript5中的hasOwnProperty()方法,用于判断只在属性存在与对象实例中的时候,返回true,in操作符只要通过对象能访问到属性就返回true. 因此只要in操作符返回true ...
- 新大陆NB-IoT模块烧写详细过程
NB-IOT 模块板设置 1. NB-IOT 模块板如下 2.将模块上红色开关 1. 2 向下拨, 3. 4 开关向上拨,如下 3.将黑色开关向左侧拨至 M3 芯片处,如下 4.将模块上启动/下载开关 ...
- 微信WXSS样式文件
目录 WXSS官方文档 1. WXSS 1.1. 尺寸单位 1.2. 样式导入 1.3. 内联样式 1.4. 选择器 1.5. 全局样式与局部样式 WXSS官方文档 https://developer ...
- JavaScript的函数(三)
函数也是对象,拥有属性和方法,就类似普通对象那样.1,length属性 arguments.lenght 表示传入实参的个数. 函数的length属性时只读属性,代表形参的个数.可以用argument ...
- web实验二 ---通过jQuery实现用户注册身份验证
通过jQuery实现用户注册身份验证,当每个文本框失去焦点时进行该文本框内容校验,并将校验信息在文本框右侧显示出结果. 具体校验要求: 1.用户名由6-18位字符组成 2.密码由6-18位字符组成,且 ...