使用 Spring Boot 构建 RESTful API
1. 使用 Idea 创建 Spring Initializer 项目

在创建项目的对话框中添加 Web 和 Lombok,或者建立项目后在 pom.xml 中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2. 使用注解构建 RESTful API
此处没有使用数据库,用 ArrayList 作为操作对象。
创建一个实体类,作为 API 操作的对象
package top.cloudli.demo.model;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Character {
private int id;
private String name;
private String racial;
private String[] ability;
}
这里使用了 lombok,省去了编写 Getter、Setter 以及构造函数,添加相应的注解后 lombok 会自动生成。
创建 Controller,实现 RESTful API
@RestController 相当于 @Controller 和 @ResponseBody 的组合,使用该注解后,MIME 默认为 application/json。
@GetMapping 相当于 @RequestMapping(method = {RequestMethod.GET}),其他注解类似。
package top.cloudli.demo.controller;
import org.springframework.web.bind.annotation.*;
import top.cloudli.demo.model.Character;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* CRUD for Character
*/
@RestController
@RequestMapping(path = "/character")
public class CharacterController {
private ArrayList<Character> characters = (ArrayList<Character>) Stream.of(
new Character(1, "罗小黑", "妖精", new String[]{"空间系-传送", "空间系-领域"}),
new Character(2, "罗小白", "人类", null)
).collect(Collectors.toList());
/**
* 获取所有 Character
* @return All Characters
*/
@GetMapping()
public List<Character> getCharacters() {
return characters;
}
/**
* 根据 id 获取 Character
* @param id Id of Character
* @return Character
*/
@GetMapping(path = "{id}")
public Character getCharacter(@PathVariable int id) {
return characters.stream()
.filter(character -> character.getId() == id)
.findAny()
.orElse(null);
}
/**
* 更新 Character
* @param character Changed Character
* @return Updated Character
*/
@PutMapping()
public Character alterCharacter(@RequestBody Character character) {
AtomicBoolean found = new AtomicBoolean(false);
characters.replaceAll(c -> {
if (c.getId() == character.getId()) {
found.set(true);
return character;
} else return c;
});
return found.get() ? character : null;
}
/**
* 添加 Character
* @param character New Character
* @return Inserted Character
*/
@PostMapping()
public Character addCharacter(@RequestBody Character character) {
return characters.add(character) ? character : null;
}
/**
* 删除 Character
* @param id Id of Character
* @return Id of Character deleted
*/
@DeleteMapping(path = "{id}")
public int deleteCharacter(@PathVariable int id) {
return characters.removeIf(character -> character.getId() == id) ? id : -1;
}
}
3. 运行项目,访问 API
| URL | 方法 | 操作 |
|---|---|---|
| /character | GET | 获取所有的 Character |
| /character/id | GET | 获取指定 id 的 Character |
| /character | PUT | 修改 Character,传递修改后的完整对象 |
| /character/id | DELETE | 删除指定 id 的 Character |
如果使用 ?id=xxx 的方式,可以将注解中的 path 参数去掉。
发送 GET 请求到 http://localhost:8080/character :
[
{
"id": 1,
"name": "罗小黑",
"racial": "妖精",
"ability": [
"空间系-传送",
"空间系-领域"
]
},
{
"id": 2,
"name": "罗小白",
"racial": "人类",
"ability": null
}
]
发送 GET 请求到 http://localhost:8080/character/1 :
{
"id": 1,
"name": "罗小黑",
"racial": "妖精",
"ability": [
"空间系-传送",
"空间系-领域"
]
}
DELETE 请求与上面的 GET 一样,成功后指定 id 的 Character 将被删除,返回删除的 id。
发送 PUT 请求到 ``http://localhost:8080/character,向 Header 添加 Content-Type:application/json`,Body 部分为 修改后的完整数据:
{
"id": 1,
"name": "小黑",
"racial": "妖精",
"ability": [
"空间系-传送"
]
}
成功后将返回与上面一样的 JSON 数据。
POST 请求与前面的 PUT 一样,成功后返回提交的数据。
使用 Spring Boot 构建 RESTful API的更多相关文章
- Spring Boot构建RESTful API与单元测试
如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下相关的内容. @Controller:修饰class,用来创建处理http请求的对象 @RestController:Spr ...
- Spring Boot构建RESTful API
@Controller:修饰class,用来创建处理http请求的对象 @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseB ...
- Spring Boot构建 RESTful 风格应用
Spring Boot构建 RESTful 风格应用 1.Spring Boot构建 RESTful 风格应用 1.1 实战 1.1.1 创建工程 1.1.2 构建实体类 1.1.4 查询定制 1.1 ...
- Spring Boot2 系列教程(三十一)Spring Boot 构建 RESTful 风格应用
RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 ...
- 基于Spring Boot的RESTful API实践(一)
1. RESTful简述 REST是一种设计风格,是一组约束条件及原则,而遵循REST风格的架构就称为RESTful架构,资源是RESTful的核心,一个好的RESTful架构,通过URL就能很 ...
- Spring Boot中Restful Api的异常统一处理
我们在用Spring Boot去向前端提供Restful Api接口时,经常会遇到接口处理异常的情况,产生异常的可能原因是参数错误,空指针异常,SQL执行错误等等. 当发生这些异常时,Spring B ...
- spring boot构建restful服务
使用spring boot快速构建出restful服务 JPA实现REST 创建spring boot项目,在项目文件pom.xml中添加以下依赖: <dependency> <gr ...
- 通过spring boot提供restful api
1 将返回设置为produces = "application/json" 返回给客户端json格式的response. 2 对各种异常的处理 各种异常如何返回给客户端? 各种异常 ...
- Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档
前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...
随机推荐
- Fundebug后端Node.js插件更新至0.2.0,支持监控Express慢请求
摘要: 性能问题也是BUG,也需要监控. Fundebug后端Node.js异常监控服务 Fundebug是专业的应用异常监控平台,我们Node.js插件fundebug-nodejs可以提供全方位的 ...
- 详解Vue的slot新用法
摘要: 理解Vue插槽. 作者:前端小智 原文:vue 2.6 中 slot 的新用法 Fundebug经授权转载,版权归原作者所有. 为了保证的可读性,本文采用意译而非直译. 最近发布不久的Vue ...
- windows 如何cmd启动redis
运行cmd 然后到redis路径 运行命令: redis-server redis.windows.conf
- [TCP/IP] ping traceroute和TTL
1.Time To Live是生存时间的意思,就是说这个ping的数据包能在网络上存在多少时间.当我们对网络上的主机进行ping操作的时候,我们本地机器会发出一个数据包,数据包经过一定数量的路由器传送 ...
- apache主配置文件设置
主配置文件:httpd.conf #设置管理员邮箱地址ServerAdmin admin@example.com#定义apache安装根目录变量Define SRVROOT "F:\www\ ...
- JVM 对象查询语言(OQL)[转载]
最近生产环境出现一个很奇怪的问题,测试环境无法重现,本地直连生产无法重现.于是用上 jmap + Java VisualVM 的 OQL (Object Query Language) 分析问题. 关 ...
- 201871010121-王方-《面向对象程序设计(java)》第十二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...
- 201871020225-牟星源《面向对象程序设计(java)》第八周学习总结
201871020225-牟星源<面向对象程序设计(java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- 201871010108-高文利《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...
- 【oracle】11g服务器安装详细步骤
以下是百度经验:https://jingyan.baidu.com/article/363872eccfb9266e4aa16f5d.html 1.同时解压 2.setup 3.