开发者社区> 优惠券活动> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【spring springmvc】这里有你想要的SpringMVC的REST风格的四种请求方式

简介:
+关注继续查看

【spring springmvc】这里有你想要的SpringMVC的REST风格的四种请求方式
概述
之前的文章springmvc使用注解声明控制器与请求映射有简单提到过控制器与请求映射,这一次就详细讲解一下SpringMVC的REST风格的四种请求方式及其使用方法。

你能get的知识点
1、什么是Rest风格?
2、基于springmvc实现REST风格的四种请求方式
3、post请求转换为delete与put请求
4、解决请求乱码问题
5、RequestMapping注解的属性
@

目录
概述
你能get的知识点
壹:rest风格
一:什么是Rest风格?
二:REST风格的四种请求方式
贰:基于springmvc实现REST风格的四种请求方式
一:@GetMapping请求
二:@PostMapping请求
三:@DeleteMapping请求
四:@PutMapping请求
叁:问题
一:post请求转换为delete与put请求
二:解决请求乱码问题
肆: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


<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>


<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>


注意:delete和put请求最好使用Redirect(重定向),不然会报404错误。

二:解决请求乱码问题

<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-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>


注意:编码的过滤器应该放在所有的过滤器前,否则不生效

肆: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,用于请求后的页面跳转。

各种请求


hello Get请求
<button type="submit">hello Post请求</button>


<input type="hidden" name="_method" value="delete">
<button type="submit">hello Delete请求</button>


<input type="hidden" name="_method" value="put">
<button type="submit">hello put请求</button>


结果:

原文地址https://www.cnblogs.com/lomtom/p/12591836.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Spring技术原理】SpringMVC集成Java Bean Validation实现参数检验功能
【Spring技术原理】SpringMVC集成Java Bean Validation实现参数检验功能
0 0
理论:第五章:Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点
理论:第五章:Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点
0 0
Spring MVC框架:第一章:SpringMVC概述及初步体会SpringMVC使用过程
Spring MVC框架:第一章:SpringMVC概述及初步体会SpringMVC使用过程
0 0
Spring、SpringMVC和SpringBoot看这一篇就够了!
SpringBoot只是Spring本身的扩展,使开发,测试和部署更加方便。
0 0
基于Spring+SpringMvc实现的足球队管理系统
基于Spring+SpringMvc实现的足球队管理系统
0 0
将Spring+SpringMVC+MyBatis(简称ssm)项目及数据库完整的部署CentOS7
Nginx是一款高性能的Web服务器,最初由俄罗斯程序员Igor Sysoev开发,自2004年问世以来,凭借其高性能、高可靠、易扩展等优点,在反向代理、负载均衡、静态文件托管等主流场合得到了广泛的应用。
0 0
Spring和SpringMVC 父子容器的问题
Spring与SpringMVC的容器属于父子容器关系,在配置使用SpringMVC时,若SpringMVC容器在Spring容器之前创建,可能会导致项目在编译运行时出现异常。
0 0
浅述 Spring / SpringMVC 框架中用到的哪些设计模式(下)
Design Patterns(设计模式) 是面向对象软件开发中最好的计算机编程实践。 Spring 框架中广泛使用了不同类型的设计模式,下面我们来看看 Spring 到底有哪些设计模式?
0 0
浅述 Spring / SpringMVC 框架中用到的哪些设计模式(上)
Design Patterns(设计模式) 是面向对象软件开发中最好的计算机编程实践。 Spring 框架中广泛使用了不同类型的设计模式,下面我们来看看 Spring 到底有哪些设计模式?
0 0
Spring相关概念注解及SpringMVC操作流程图集
Spring相关概念注解及SpringMVC操作流程图集
0 0
+关注
优惠券活动
阿里云优惠码阿里云推荐券bieryun.com
文章
问答
文章排行榜
最热
最新
相关电子书
更多
电商网站需求分析和架构设计Spring Boot2.6入门
立即下载
云上Docker的Spring Cloud微服务应用实践分享
立即下载
Spring Boot 2.6.0电商网站开发实战
立即下载