

【spring springmvc】这里有你想要的SpringMVC的REST风格的四种请求方式
source link: http://www.cnblogs.com/lomtom/p/12591836.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

概述
之前的文章 springmvc使用注解声明控制器与请求映射 有简单提到过控制器与请求映射,这一次就详细讲解一下 SpringMVC
的 REST
风格的四种请求方式及其使用方法。
你能get的知识点
1、什么是Rest风格?
2、基于 springmvc
实现REST风格的四种请求方式
3、post请求转换为 delete
与 put
请求
4、解决请求乱码问题
5、 RequestMapping
注解的属性
@
目录
-
- 二:REST风格的四种请求方式
- 贰:基于springmvc实现REST风格的四种请求方式
-
- 一: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
<!--使用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>
结果:

Recommend
-
53
嗯~世界上第二好的语言,这里有你可能想要的:pill: 在 GitHub 上稳定更新,觉得不错请点个 Star :heart: 如转载分享,请保留出处,谢谢 :laughing:...
-
22
SpringMVC系列(三):REST风格 ...
-
31
什么是物联网? 物联网(The Internet of Things,IoT)指的是世界各地数十亿个连接到互联网的物理设备,所有设备都在收集和共享数据。得益于超低价电脑芯片的到来和无线网络的普及,任何东西都有可能成为物联网的一...
-
8
福布斯:关于Coinbase上市,这里有你想知道的一切江小道12小时前1871很快,你就能购买帮助您购买比特币的公司的股票了——虽然这句话听起来...
-
4
来源/Forbes 作者/Taylor Tepper 翻译/Moni 很快,你就能购买帮助您购买比特币的公司的股票了...
-
6
总结18个 webpack 插件,总会有你想要的! 作者:lzg9527 https://juejin.cn/post/6844904...
-
6
本文约 840 字、5 张图表,需 2 分钟阅读 都说年底是消费者们薅羊毛的好时机,双11过完紧接着就有双12,如今这第二波促销优惠季也即将开启,厂商们纷...
-
6
清醒点,居家办公没有你想要的自由-36氪清醒点,居家办公没有你想要的自由猎聘·2022-05-06 11:47越是在这个特殊时刻,更需要双...
-
8
一、REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描述形式
-
5
关于Aptos主网上线,这里有你想知道的一切藏民7小时前2368秋意正浓,Aptos的主网Autumn(英译:秋天)也如期而至。10月18日,公链项目Aptos官方宣布正式启动主...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK