前言
项目创建参考之前的《Vert.x 4 Web应用初识》。本文通过Vert.x实现了REST接口的CRUD操作。通过本教程你可以获得以下内容
maven pom.xml添加依赖包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4.1</version>
</dependency>
创建一个Whisky
的对象,内容如下:
public class Whisky {
private static final AtomicInteger COUNTER = new AtomicInteger(1);
private final int id;
private String name;
private String origin;
public Whisky() {
this.id = COUNTER.getAndIncrement();
}
public Whisky(String origin, String name) {
this.id = COUNTER.getAndIncrement();
this.origin = origin;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getOrigin() {
return origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
}
该对象主要用于接口的模拟CRUD操作用。
本次演示项目核心就两个类
这里暂时不讲解数据库相关的操作,在MainVerticle中创建LinkedHashMap来代替数据库,并初始化几个数据在其中。
聚焦产品信息代码
// 存放我们的产品
private final Map<Integer, Whisky> products = new LinkedHashMap<>();
// 初始化一些
private void initData() {
Whisky whisky1 = new Whisky("Bowmore 10 Years Laimrig", "Scotland, Islay");
products.put(whisky1.getId(), whisky1);
Whisky whisky2 = new Whisky("Talisker 55° North", "Scotland, Island");
products.put(whisky2.getId(), whisky2);
}
在start
方法中优先调用初始化方法
//调用初始化数据先
initData();
聚焦代码
//get 接口 获取所有产品信息
router.get("/api/whisky/getAll").handler(this::getAll);
/**
* 获取所有产品信息
* @param routingContext 路由上下文
*/
private void getAll(RoutingContext routingContext){
routingContext.response()
.putHeader("content-type", "application/json; charset=utf-8")
.end(Json.encodePrettily(products.values()));
}
启动项目然后通过POSTMAN工具访问
可以看到正常返回了数据,且格式为JSON
代码聚焦
//允许/api/whisky*匹配请求全局读取请求体(body)数据
router.route("/api/whisky*").handler(BodyHandler.create());
//添加一个产品
router.post("/api/whisky/add").handler(this::add);
/**
* 新增要给产品并将新增的产品信息返回,并设定成功状态码201
* @param routingContext 路由上下文
*/
private void add(RoutingContext routingContext){
final Whisky whisky = Json.decodeValue(routingContext.body().asString(), Whisky.class);
products.put(whisky.getId(), whisky);
routingContext.response()
.setStatusCode(201)
.putHeader("content-type", "application/json; charset=utf-8")
.end(Json.encodePrettily(products));
}
启动项目然后通过POSTMAN工具访问并传递新增参数
从上图可以看到新增产品返回信息与我们预期一致。
代码聚焦
//获取产品通过指定id
router.get("/api/whisky/get/:id").handler(this::getById);
/**
* 通过路径参数id获取单个产品
* @param routingContext 路由上下文
*/
private void getById(RoutingContext routingContext){
String id = routingContext.pathParam("id");
routingContext.response()
.putHeader("content-type", "application/json; charset=utf-8")
.end(Json.encodePrettily(products.get(Integer.parseInt(id))));
}
从上图可以看出通过产品ID路径参数获取产品信息与我们预期结果一致
产品更新与新增技术相似性高度重合则不再编写,参考新增技术即可。
代码聚焦
//删除
router.delete("/api/whisky/delete").handler(this::delete);
/**
* 删除产品 (根据传入id)
* @param routingContext 路由上下文
*/
private void delete(RoutingContext routingContext){
String id = routingContext.request().getParam("id");
products.remove(Integer.valueOf(id));
routingContext.response()
.setStatusCode(204)
.end();
}
编写完成后重启项目并使用postman工具访问接口
从上图可以看到响应结果与我们预期一致。
https://www.leftso.com/article/2408121624563971.html