Vert.x 4 Web REST CRUD接口应用

教程分享 > Java教程 > Vert.x (457) 2024-08-13 07:34:11

前言

项目创建参考之前的《Vert.x 4 Web应用初识》。本文通过Vert.x实现了REST接口的CRUD操作。通过本教程你可以获得以下内容

  • vert.x项目中如何接收请求(requestParam)参数
  • vert.x项目中如何接收body json参数
  • vert.x项目中如何接收路径(pathParam)参数
  • vert.x项目中如何将JSON数据转换为对象
  • vert.x项目中如何返回json数据
  • vert.x项目中如何修改接口响应HTTP状态码

引入JSON支持

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操作用。

 

Vert.x REST CRUD接口

项目结构图

Vert.x 4 Web REST CRUD接口应用_图示-18372e6fe7434ff8a710b2d0e1bd6c42.png
本次演示项目核心就两个类

本次演示项目核心就两个类

  • Whisky
  • MainVerticle

 

创建默认数据库的Map

这里暂时不讲解数据库相关的操作,在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();

 

获取所有产品接口 getAll(R)

聚焦代码

//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工具访问

Vert.x 4 Web REST CRUD接口应用_图示-dc2a22bb088f4576bbf41d1f25980b4d.png
获取所有信息

可以看到正常返回了数据,且格式为JSON

 

新增一个产品 add(C)

代码聚焦

//允许/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工具访问并传递新增参数

Vert.x 4 Web REST CRUD接口应用_图示-c4f9878346884e1c8e7e715791efe9cc.png
add接口

从上图可以看到新增产品返回信息与我们预期一致。

 

获取一个产品通过指定产品ID(R)

代码聚焦

//获取产品通过指定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))));
}
Vert.x 4 Web REST CRUD接口应用_图示-99f41f6bd7d340a182e7245ef6f7261f.png

从上图可以看出通过产品ID路径参数获取产品信息与我们预期结果一致

 

产品更新(U)

产品更新与新增技术相似性高度重合则不再编写,参考新增技术即可。

 

删除一个产品通过指定产品ID (D)

代码聚焦

//删除
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工具访问接口

Vert.x 4 Web REST CRUD接口应用_图示-12025c6519394b418a761585c682cf5f.png
传递指定参数删除指定产品

从上图可以看到响应结果与我们预期一致。

 

 

MainVerticle完整代码

 

VIP资源,登录后查阅

此处内容已经隐藏,需要开通会员后刷新查阅

登录/注册

 

 

https://www.leftso.com/article/2408121624563971.html

相关文章
前言项目创建参考之前的《Vert.x 4 Web应用初识》。本文通过Vert.x实现了REST接口的CRUD操作。通过本教程你可以获得以下内容vert.x项目中
前言项目由之前的第一个vert.x 4 项目改编而来,vert.x项目创建参考: vert.x 4 web应用编写修改MainVerticle文件,内容如下:p
Vert.x java 入门,Vert.x这个框架在常规的web业务开发中估计还不是很成熟。但是了解了他的一些原理我觉得可以有一番作为。今天主要简单讲解下eclipse Vert.x是什么有什么...
前言这里主要讲解Vert.x配置文件的读取和使用,引用之前的项目《Vert.x 4 Web应用初识》 引入必要依赖maven pom.xml&lt;dependenc
前言最新的Ver.x 4 从idea工具运行启动,并访问。项目创建通过vert.x官网生成器完成。Vert.x 4项目创建打开vert.x官网项目生成地址,ht
前言文件上传在web应用比较常见,本文以vert.x web实现文件上传功能。引用之前的项目《Vert.x 4 Web应用初识》作为基础,添加了日志。 Vert
前言引用《Vert.x 4 Web REST CRUD接口应用》项目,加入日志依赖并编码实现类似Interceptor功能处理。vert.x日志集成参考《Ver
前言Vert.x 中实现全局数据共享,如环境参数等。Vertx数据共享实现共享数据存入/更新SharedData sharedData = vertx.shar
前言接上一篇《Vert.x 4 Web应用初识》,在web应用中除了访问地址得到动态的信息还有静态的资源库访问,如 jQuery / bootstrap 等前端
前言本文主要讲解在Vert.x环境下与Mysql数据库连接和操作,实现基础的增删改查和事务,以及REST接口返回数据库中查询结果。项目引用之前的《Vert.x
前言Vert.x Router路由中多个处理器之间通过RoutingContext共享数据实现。 Vert.x Router 上下文数据数据设置routingC
前言创建一个常规的web项目肯定需要一个模板引擎来实现,引用之前的项目《Vert.x 4 Web应用初识》基础结构目前vert.x支持多款模板引擎,包括:MVE
前言vert.x 默认是没有像spring的依赖注入的,需要自己结合vertx-service-proxy插件实现。本文引用项目为基础《Vert.x 4 Web
前言Web项目开发一般接口入参都有校验需求,Vert.x 4 目前已有插件实现参数校验,引用之前的项目《Vert.x 4 Web应用初识》源码 引入验证插件ma
前言前面已经学习了Vert.x web的基础接口,本文主要讲解引入jwt为接口认证/鉴权。引用之前创建的项目《Vert.x 4 Web应用初识》,加入jwt t