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的更多相关文章

  1. Spring Boot构建RESTful API与单元测试

    如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下相关的内容. @Controller:修饰class,用来创建处理http请求的对象 @RestController:Spr ...

  2. Spring Boot构建RESTful API

    @Controller:修饰class,用来创建处理http请求的对象 @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseB ...

  3. Spring Boot构建 RESTful 风格应用

    Spring Boot构建 RESTful 风格应用 1.Spring Boot构建 RESTful 风格应用 1.1 实战 1.1.1 创建工程 1.1.2 构建实体类 1.1.4 查询定制 1.1 ...

  4. Spring Boot2 系列教程(三十一)Spring Boot 构建 RESTful 风格应用

    RESTful ,到现在相信已经没人不知道这个东西了吧!关于 RESTful 的概念,我这里就不做过多介绍了,传统的 Struts 对 RESTful 支持不够友好 ,但是 SpringMVC 对于 ...

  5. 基于Spring Boot的RESTful API实践(一)

    1. RESTful简述    REST是一种设计风格,是一组约束条件及原则,而遵循REST风格的架构就称为RESTful架构,资源是RESTful的核心,一个好的RESTful架构,通过URL就能很 ...

  6. Spring Boot中Restful Api的异常统一处理

    我们在用Spring Boot去向前端提供Restful Api接口时,经常会遇到接口处理异常的情况,产生异常的可能原因是参数错误,空指针异常,SQL执行错误等等. 当发生这些异常时,Spring B ...

  7. spring boot构建restful服务

    使用spring boot快速构建出restful服务 JPA实现REST 创建spring boot项目,在项目文件pom.xml中添加以下依赖: <dependency> <gr ...

  8. 通过spring boot提供restful api

    1 将返回设置为produces = "application/json" 返回给客户端json格式的response. 2 对各种异常的处理 各种异常如何返回给客户端? 各种异常 ...

  9. Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档

    前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...

随机推荐

  1. Web Service 接口测试

    Web Service 接口测试 Web service 概念 Web service使用与平台和编程语言无关的方式进行通讯的一项技术, web service 是一个接口, 他描述了一组可以在网络上 ...

  2. day10 作业

    猜年龄升级版 ''' 1. 可以直接玩猜年龄游戏,不需要登录 2. 登录成功后玩猜年龄游戏 3. 猜年龄猜中后,可以选择两次奖品 4. 注册的用户名不能重复注册 ''' import random p ...

  3. Linux 信号量之Posix基于内存的信号量

    信号量(semaphore),也和互斥锁一样提供了线程间或者进程间的同步功能. 信号量有三种: Posix有名字的信号量 Posix基于内存的信号量 System V信号量 信号量比互斥锁高级,互斥锁 ...

  4. linux 进程通信之 守护进程

    守护进程(Daemon) Daemon(精灵)进程,是linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间.一般采用以d结尾的名字.从下面的进程信息可以看出, ...

  5. Linux Kernel PANIC(三)--Soft Panic/Oops调试及实例分析【转】

    转自:https://blog.csdn.net/gatieme/article/details/73715860 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  6. 吴丽丽-201871010123《面向对象程序设计(Java)》第七周学习总结

    吴丽丽-201871010123<面向对象程序设计(Java)>第七周学习总结 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个 ...

  7. appium python demo

    #coding=utf-8from appium import webdriverdesired_caps={}desired_caps["platformName"]=" ...

  8. Associatively Segmenting Instances and Semantics in Point Clouds

    论文引入一个简单且灵活的框架同时分割点云中的实例和语义,进一步提出两种方法让两个任务从彼此受益. 代码: https://github.com/WXinlong/ASIS 论文: https://ar ...

  9. $O(k^2)$ 求前缀 $k$ 次幂和(与长度无关)

    接下来求解前缀幂次和 求解 \(\sum_{i = 1}^{k} i^k\) \[ \begin{aligned} (p+1)^k - 1 = (p+1)^k - p^k + p^k - (p-1)^ ...

  10. 生成指定python项目中所有的依赖文件

    一. pipreqs工具 这个工具的好处是可以通过对项目目录的扫描,自动发现使用了那些类库,自动生成依赖清单. 缺点是可能会有些偏差,需要检查并自己调整下. 安装: pip install pipre ...