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. js 加密混淆工具

    访问路径:https://www.sojson.com/javascriptobfuscator.html

  2. Android自定义圆角矩形进度条2

    效果图: 或 方法讲解: (1)invalidate()方法 invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时, 调用invalidate()才 ...

  3. Scrum 冲刺第一篇

      我们是这次稳了队,队员分别是温治乾,黄思扬,莫少政,余泽端,江海灵 码云地址为:https://gitee.com/sixers/activityWall-Web 一.各个成员在 Alpha 阶段 ...

  4. SqlServer数据库之给表添加序号

    简单给查询表添加序号 SELECT row_number() over(order by inserttime asc) as id,* FROM [RecordDrawScore]

  5. web文件上传的总结(一)

    在HTML文件中用表单标签,需要注意input中type为file的name属性值myfile,PHP获取上传文件信息使用name属性值来区分的 1:表单 method="post &quo ...

  6. reduce计算数组中每个元素出现的次数 数组去重的几种方式 将多维数组转化为一维

    // js计算数组中每个元素出现的次数 // var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; // var countedNames = ...

  7. LOJ 546: 「LibreOJ β Round #7」网格图

    题目传送门:LOJ #546. 题意简述: 题目说的很清楚了. 题解: 将不包含起点或障碍物的连续的行或列缩成一行或一列,不会影响答案. 处理过后,新的网格图的行数和列数最多为 \(2k + 3\). ...

  8. 很不错的python 机器学习资源

    http://www.cuijiahua.com/resource.html 曾看过的书,感觉一些很有用的学习资料,推荐给大家! Python基础: 网络教程推荐: 系统学习python3可以看廖雪峰 ...

  9. uiautomator手动调试与快速高度设置

    创建java工程:Demo1包名:com.bing.cn类名:Test测试用例:testDemo android create uitest-project -n Demo1 -t 7 -p E:\e ...

  10. Java8——jdk——java.time包

    public class TestLocalDateTime { //6.ZonedDate.ZonedTime.ZonedDateTime : 带时区的时间或日期 @Test public void ...