亲宝软件园·资讯

展开

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

lomtom 人气:0
# 概述 之前的文章[springmvc使用注解声明控制器与请求映射](https://blog.csdn.net/qq_41929184/articlehttps://img.qb5200.com/download-x/details/104997012)有简单提到过控制器与请求映射,这一次就详细讲解一下`SpringMVC`的`REST`风格的四种请求方式及其使用方法。 ## 你能get的知识点 1、什么是Rest风格? 2、基于`springmvc`实现REST风格的四种请求方式 3、post请求转换为`delete`与`put`请求 4、解决请求乱码问题 5、`RequestMapping`注解的属性 @[TOC] ![](https://img-blog.csdnimg.cn/20200329130918103.png) # 壹: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`、`/userhttps://img.qb5200.com/download-x/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`是其唯一属性时,可以省略属性名。 ```java @RequestMapping(value = "/rest",method = RequestMethod.GET) public String restGet(){ System.out.println("Get请求,hello....."); return "hello"; } ``` `@GetMapping`是一个组合注解,是`@RequestMapping(method = RequestMethod.GET)`的缩写。 所以我们可以将以上代码简单的写成: ```java @GetMapping("/rest") public String restGet(){ System.out.println("Get请求,hello....."); return "hello"; } ``` ## 二:@PostMapping请求 ```java @PostMapping("/rest") public String restPost(){ System.out.println("Post请求,hello....."); return "hello"; } ``` ## 三:@DeleteMapping请求 ```java @DeleteMapping("/rest") public String restDelete(){ System.out.println("Delete请求,hello....."); return "redirect:rest"; } ``` ## 四:@PutMapping请求 ```java @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 ```xml ``` **注意**:delete和put请求最好使用Redirect(重定向),不然会报404错误。 ## 二:解决请求乱码问题 ```xml ``` **注意**:编码的过滤器应该放在所有的过滤器前,否则不生效 # 肆: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,用于请求后的页面跳转。 ```html

各种请求

hello Get请求 ``` 结果: ![](https://img-blog.csdnimg.cn/20200329124302860.png)

加载全部内容

相关教程
猜你喜欢
用户评论