RESTful风格

本文介绍了RESTful风格在API设计中的优势,详细阐述了如何在Spring MVC中利用`@RequestMapping`的`method`属性及衍生注解如`@GetMapping`, `@PostMapping`等实现RESTful接口。通过示例说明了如何处理表单提交,特别是如何模拟DELETE请求,以符合RESTful原则。" 77851598,1347733,解决Android Studio编译错误:Timeout waiting to lock artifact cache,"['Android开发', 'Android Studio', 'Gradle', '问题解决']

RESTful风格

我们在对一个数据进行增删改查操作时,按照传统的方式需要定义四个接口,来接收增删改查这四种不同的请求。设想一下,如果我们有一个用户信息需要增删改查,就需要/addUser,/delectUser,/updateUser,/queryUser四个不同的uri,这样做未免过于繁琐,而且每次都需要给不同的uri起不同的名字也不容易,这个时候我们可以使用RESTful风格的API

RESTful风格定义

首先我们看一下RESTful风格的定义

REST,即Representational State Transfer的缩写。直接翻译的意思是"表现层状态转化"。

它是一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

RESTful风格定义了一系列的请求类型,简单的和增删改查的对应关系如下

CRUD 动作HTTP 方法
CreatePOST
QueryGET
UpdatePUT或PATCH
DeleteDELETE

使用了RESTful风格,我们只需要一个/user的uri就足够了,RESTful风格的API可以使用同样的uri,而用不同的请求类型来对数据做不同的操作,而这在Spring MVC中也可以实现

@RequestMapping的method属性

@RequestMapping中有一个method属性,我们可以通过设置这个属性来绑定这个接收请求的方法接收的是什么类型的请求

@RestController
public class MyController {

    @RequestMapping(path = "/user", method = RequestMethod.GET)
    public String queryUser() {
        return "queryUser";
    }

    @RequestMapping(path = "/user", method = RequestMethod.POST)
    public String createUser() {
        return "createUser";
    }
}

设置method属性时使用RequestMethod这个枚举类的值

这里定义了两个方法,这两个方法都使用/user这个uri,然而这并不冲突,前端的请求如果是GET类型的,就会执行queryUser方法,如果是POST类型的,就会执行updateUser方法

我们使用postman这个工具来帮助我们发送不同的请求,测试返回的结果

在这里插入图片描述

在这里插入图片描述

从不同的结果可以看出,两次请求分别走了不同的请求处理方法

@RequestMapping衍生注解

除了使用@RequestMapping的method属性,还可以使用@RequestMapping注解的衍生注解来指定接收请求方法接收的请求类型,有以下几个衍生注解

  • @GetMapping
  • @PostMapping
  • @DeleteMapping
  • @PatchMapping
  • @PutMapping

使用这些衍生注解,就不需要使用@RequestMapping注解了,点开可以发现这些衍生注解相当于设置了method属性的@RequestMapping注解

在这里插入图片描述

@RestController
public class MyController {

    @GetMapping("/user")
    public String queryUser() {
        return "queryUser";
    }

    @PostMapping("/user")
    public String createUser() {
        return "createUser";
    }
}

表单提交使用RESTful风格

在表单提交中,只有GET和POST两种请求,不过这种情况也是可以使用RESTful风格的,只需要遵循Spring Boot的规范就行

例如我们现在要发送一个请求类型为DELETE的请求,表单元素的method属性还是写post,然后在表单中添加一个input元素,一般是hidden类型的,然后元素名命名为_method,值绑定真正的请求类型即可,这个value属性的DELETE不分大小写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
<form action="/user" method="post">
    <input type="hidden" name="_method" value="delete">
    <input type="submit" value="删除">
</form>

</body>
</html>

然后在配置文件中使用以下配置将Spring MVC的表单过滤器功能打开

spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true

这样表单发送的请求虽然原生是POST类型的,但是Spring MVC会当成DELETE类型处理

### Restful 风格基本概念 Restful 是一种资源定位及资源操作的风格,并标准或协议。基于该风格设计的软件更简洁、有层次,且易于实现缓存等机制。互联网中的所有事物都可抽象为资源,使用 POST、DELETE、PUT、GET 不同方法对资源进行操作,分别对应添加、删除、修改、查询 [^3]。 ### Java 后端使用 Restful 风格的语法 在 Java 后端开发中,常使用 Spring 框架实现 Restful 风格的 API。以下是一些关键语法和示例: #### 1. `@RequestMapping` 注解 `@RequestMapping` 是一个通用的请求映射注解,可用于类和方法上,用于指定请求的 URL 和 HTTP 方法。 ```java import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class RestfulContraller { // 之前的写法 @RequestMapping("/add") public String test(int a, int b, Model model) { int res = a + b; model.addAttribute("msg", "结果为" + res); return "test"; } } ``` #### 2. 更细化的 HTTP 方法注解 为了更清晰地表达请求的 HTTP 方法,Spring 提供了 `@GetMapping`、`@PostMapping`、`@PutMapping`、`@DeleteMapping` 等注解。 ```java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api") public class UserController { // 查询全部用户 @GetMapping("/users") public String getAllUsers() { return "获取所有用户"; } // 新增用户 @PostMapping("/users") public String createUser() { return "创建新用户"; } // 根据 ID 修改用户 @PutMapping("/users/{id}") public String updateUser(@PathVariable Long id) { return "更新用户,ID 为: " + id; } // 根据 ID 删除用户 @DeleteMapping("/users/{id}") public String deleteUser(@PathVariable Long id) { return "删除用户,ID 为: " + id; } } ``` #### 3. `@PathVariable` 注解 用于从 URL 中提取变量。 ```java import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class RestFulController { @RequestMapping(value = "/commit/{a}/{b}", method = {RequestMethod.POST}) public String RestFul2(@PathVariable int a, @PathVariable String b, Model model) { String res = a + b; model.addAttribute("msg", "post 结果为:" + res); return "rest"; } } ``` ### 总结 Java 后端使用 Restful 风格主要借助 Spring 框架的注解来实现资源的定位和操作,通过不同的 HTTP 方法和 URL 设计,使 API 更具可读性和可维护性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值