Spring Boot构建RESTful(非常详细)
RESTful 架构是目前最流行的互联网软件架构规范,是 Web API(应用编程接口)的大趋势和主流规范,了解了 RESTful 的众多优点之后,接下来一步一步地学习如何使用 Spring Boot 构建 RESTful Web API。
通过这些注解就可以在 Spring Boot 项目中轻松构建 RESTful 接口。其中比较常用的是 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping 四个注解。
使用 Spring Boot 开发 RESTful 接口非常简单,通过 @RestController 定义控制器,然后使用 @GetMapping 和 @PostMapping 等注解定义地址映射,实现相应的资源操作方法即可。
在上面的示例中,通过 Spring Boot 提供的 @GetMapping 等注解简单实现了对用户(user)的操作。其实,这些注解就是 @RequestMapping 注解的简化:
我们看到,Get 和 Delete、Post 和 Put 请求的 URL 是相同的,不同的 Method(GET、PUT、POST、DELETE) 会被映射到对应的处理方法上。这就是 REST 的魅力,简单明了的 URL 就能显示它的功能和作用。
下表是用户管理模块的接口定义,实际项目的 RESTful API 文档要更详细,还会定义全部请求的数据结构体。
上表定义了用户管理模块的接口,根据 REST 的定义,我们将用户定义为一种资源,通过 POST、DELETE、PUT、GET 等 HTTP Method 实现对用户的增、删、改、查。
可能大家会有疑问,为什么 URI 中没有我们习惯的 getUser、saveUser 这类路径?这正是 RESTful 优雅的地方,它将对资源的操作都定义在 HTTP Method 中,使得 URL 地址看起来更简洁。
除了设计 URL 接口之外,还需要定义服务端向客户端返回的状态码和提示信息。详细的状态码说明见下表。
上表中除了定义用户管理相关的业务状态码之外,还需要定义通用的错误码,如 400 对应数据校验错误、401 对应数据无权限等。
① 用户新增:
② 用户修改:
③ 用户删除:
④ 获取用户:
打开 Postman,使用 POST 方法请求 /user 接口,验证新增人员的接口是否正常,如下图所示。

图 1 在用户管理模块中验证新增用户的接口
通过 Postman 发送 POST 请求,调用人员新增接口,后台接口处理成功后,返回人员信息保存成功。
接下来,使用 GET 方法请求 /user/2001 获取 userId 为 2001 的人员信息,从而验证获取人员的接口是否正常,如下图所示:

图 2 在用户管理模块验证获取用户的接口
通过 Postman 向后台接口发送 GET 方法请求 /user/2001,RESTful API 成功返回人员详细信息。
Spring Boot对RESTful的支持
Spring Boot 提供的 spring-boot-starter-web 组件完全支持开发 RESTful API,提供了与 REST 操作方式(GET、POST、PUT、DELETE)对应的注解:- @GetMapping:处理 GET 请求,获取资源;
- @PostMapping:处理 POST 请求,新增资源;
- @PutMapping:处理 PUT 请求,更新资源;
- @DeleteMapping:处理 DELETE 请求,删除资源;
- @PatchMapping:处理 PATCH 请求,用于部分更新资源。
通过这些注解就可以在 Spring Boot 项目中轻松构建 RESTful 接口。其中比较常用的是 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping 四个注解。
使用 Spring Boot 开发 RESTful 接口非常简单,通过 @RestController 定义控制器,然后使用 @GetMapping 和 @PostMapping 等注解定义地址映射,实现相应的资源操作方法即可。
@GetMapping(value="/user/{id}") public String getUserByID(@PathVariable int id){ return "getUserByID:"+id; } @PostMapping(value="/user ") public String save(User user){ return "save successed"; } @PutMapping(value="/user") public String update(User user){ return "update successed"; } @DeleteMapping(value="/{id}") public String delete(@PathVariable int id){ return "delete id:"+id; }
在上面的示例中,通过 Spring Boot 提供的 @GetMapping 等注解简单实现了对用户(user)的操作。其实,这些注解就是 @RequestMapping 注解的简化:
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET) public String getUserByID(@PathVariable int id){ return "getUserByID:"+id; } @RequestMapping(value = "/user", method = RequestMethod.POST) public String save(User user){ return "save successed"; } @RequestMapping(value = "/user", method = RequestMethod.PUT) public String update(User user){ return "update successed"; } @RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE) public String delete(@PathVariable int id){ return "delete id:"+id; }之前介绍的 @RequestMapping 注解通过 method 参数定义映射的 HTTP 请求方法,就相当于 @RequestMapping+ RequestMethod 的简化版。
我们看到,Get 和 Delete、Post 和 Put 请求的 URL 是相同的,不同的 Method(GET、PUT、POST、DELETE) 会被映射到对应的处理方法上。这就是 REST 的魅力,简单明了的 URL 就能显示它的功能和作用。
Spring Boot实现RESTful API
接下来根据之前介绍的 RESTful 设计风格,以用户管理模块为例演示 Spring Boot 如何实现 RESTful API。1) 设计API
在 RESTful 架构中,每个网址代表一种资源,所以 URI 中建议不要包含动词,只包含名词即可,而且所用的名词往往与数据库的表格名对应。下表是用户管理模块的接口定义,实际项目的 RESTful API 文档要更详细,还会定义全部请求的数据结构体。
HTTP Method | 接口地址 | 接口说明 |
---|---|---|
POST | /user | 创建用户 |
GET | /user/id | 根据 id 获取用户信息 |
PUT | /user | 更新用户 |
DELETE | /user/id | 根据 id 删除对应的用户 |
上表定义了用户管理模块的接口,根据 REST 的定义,我们将用户定义为一种资源,通过 POST、DELETE、PUT、GET 等 HTTP Method 实现对用户的增、删、改、查。
可能大家会有疑问,为什么 URI 中没有我们习惯的 getUser、saveUser 这类路径?这正是 RESTful 优雅的地方,它将对资源的操作都定义在 HTTP Method 中,使得 URL 地址看起来更简洁。
除了设计 URL 接口之外,还需要定义服务端向客户端返回的状态码和提示信息。详细的状态码说明见下表。
状态码 | 状态说明 | 错误码 | 错误说明 |
---|---|---|---|
200 | OK,请求成功 | 400 | 数据验证错误 |
201 | Created,新增成功 | 401 | 无权限 |
203 | Updated,修改成功 | 404 | 资源不存在 |
204 | Deleted,删除成功 | 500 | 服务端错误 |
上表中除了定义用户管理相关的业务状态码之外,还需要定义通用的错误码,如 400 对应数据校验错误、401 对应数据无权限等。
2) 实现用户管理接口
上面定义了 RESTful API 以及接口返回的状态码,接下来根据之前的接口定义先创建 UserController,再实现用户管理模块的用户新增、用户修改、用户删除、用户查询等接口。① 用户新增:
@PostMapping(value = "user") public JSONResult save(@RequestBody User user){ System.out.println("用户创建成功:"+user.getName()); return JSONResult.ok(201,"用户创建成功"); }@PostMapping 注解表示此为 POST 接口。通过 POST 方法传入用户数据,然后调用 Save 方法保存用户数据。
② 用户修改:
@PutMapping(value = "user") public JSONResult update(@RequestBody User user) { System.out.println("用户修改成功:"+user.getName()); return JSONResult.ok(203,"用户修改成功"); }@PutMapping 注解表示此为 PUT 接口。PUT 和 POST 的 URL 是相同的,只是通过 PUT、POST 方法加以区分。后端处理逻辑不同,所以使用时千万别搞混了。
③ 用户删除:
@DeleteMapping("user/{userId}") public JSONResult delete(@PathVariable String userId) { System.out.println("用户删除成功:"+userId); return JSONResult.ok(204,"用户删除成功"); }@DeleteMapping 注解表示此为删除接口。通过传入参数 userId 删除人员信息。
④ 获取用户:
@GetMapping("user/{userId}") public JSONResult queryUserById(@PathVariable String userId) { User user =new User(); user.setUserId(userId); user.setName("weiz"); user.setAge(20); System.out.println("获取用户成功:"+userId); return JSONResult.ok(200,"获取用户成功",user); }@GetMapping 注解表示此为查询接口。@PathVariable 注解用于参数映射,获取传入的参数。
3) 验证测试
至此,用户管理的模块接口都实现了。接下来验证接口调用。我们可以使用单元测试或者 Postman 工具调用用户管理模块的相关接口,测试接口是否正常。这里就以 Postman 工具演示 RESTful API 的测试。打开 Postman,使用 POST 方法请求 /user 接口,验证新增人员的接口是否正常,如下图所示。

图 1 在用户管理模块中验证新增用户的接口
通过 Postman 发送 POST 请求,调用人员新增接口,后台接口处理成功后,返回人员信息保存成功。
接下来,使用 GET 方法请求 /user/2001 获取 userId 为 2001 的人员信息,从而验证获取人员的接口是否正常,如下图所示:

图 2 在用户管理模块验证获取用户的接口
通过 Postman 向后台接口发送 GET 方法请求 /user/2001,RESTful API 成功返回人员详细信息。