vert.x框架基础实现
未经授权不得转载
开发工具以及环境:
- IntelliJ IDEA 2018.2.4
- JDK 1.8
- Maven 3.5.4
- vert.x 3.4.2
首先创建一个空的Maven Project,pom.xml如下:
4.0.0 com.lgc vertxproject 1.0-SNAPSHOT 3.4.2 io.vertx.core.Launcher io.example.MainVerticle io.vertx vertx-core ${vertx.version} io.vertx vertx-unit ${vertx.version} test io.vertx vertx-web 3.4.2 io.vertx vertx-web-client 3.4.2 junit junit 4.12 test maven-compiler-plugin 3.3 1.8 1.8 org.apache.maven.plugins maven-shade-plugin package shade ${main.class} ${main.verticle} ${project.build.directory}/${project.artifactId}-${project.version}-prod.jar
MainVerticle 代码如下:
启动器入口实现很简单
package io.example;import io.vertx.core.AbstractVerticle;/*** @Author: lgc* @Date: 2019/7/24 16:23*/
public class MainVerticle extends AbstractVerticle {@Overridepublic void start() throws Exception {vertx.deployVerticle(MyFirstVerticle.class.getName());}
}
下面是一个router 实现
package io.example;import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.Router;/*** @Author: lgc* @Date: 2019/7/24 16:05*/
public class MyFirstVerticle extends AbstractVerticle {@Overridepublic void start() throws Exception {HttpServer server = vertx.createHttpServer();Router router = Router.router(vertx);Route route = router.route(HttpMethod.POST,"/helloPost").consumes("application/json").produces("application/json");route.handler(routingContext -> {HttpServerRequest request = routingContext.request();request.bodyHandler(body ->{JsonObject jsonObject = body.toJsonObject();String id = jsonObject.getString("id");String name = jsonObject.getString("name");// params -> jsonJsonObject responseData = new JsonObject();responseData.put("id",id);responseData.put("name",name);request.response().end(responseData.toString());});});server.requestHandler(router::accept).listen(8080);}
}
简单描述一下:
Router 路由器 : 请求分发需要通过路由器
Route 路由 : 主要是匹配对应的请求路径
handler 处理器 :路径处理
Context : 上下文
上述代码中,我们定义了HttpMethod 以及 consumes 、produces 。这里各位可以自行替换,选取合适自己的业务需求的。
HttpServerRequest 是 vert.x自身的接口,但是其实在api 上的使用可以等同于 Apache 的。
参数获取:
官方文档中的实例偏向于Restful 风格 ,所以提供的实例是通过路径中的占位符获取。
Route route = router.route(HttpMethod.POST, "/catalogue/products/:producttype/:productid/");route.handler(routingContext -> {String productType = routingContext.request().getParam("producttype");String productID = routingContext.request().getParam("productid");// 执行某些操作...
});
而我本人在实际使用中更加偏向传统的api定义方式并且反感在路径中携带参数的做法,所有在经过参考资料以及官方文档之后进行了修改。主要是 bodyHandler 消息体处理器 处理参数。
我们实例中的入参使用json对象,所以我们在处理参数时,选择了 body.toJsonObject() ,其他的进行逻辑处理即可。
POSTMAN 示例如下:


本文所参考文章如下:
官方中文文档 : http://vertxchina.github.io/vertx-translation-chinese/web/Web.html
风铃峰顶文章 : https://blog.csdn.net/haoranhaoshi/article/details/95097249
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
