Vertx 实现webapi实战项目(五)
添加测试handler
一:定义上传json,注意,mId是必须的。
1 {
2 "mId": 101,
3 "name":"cddd",
4 "age":23
5 }
二:新建上传json解析类,继承上传抽象类AbstractUpMessage。
public class DemoRequest extends AbstractUpMessage {
public String name;
public int age;
@Override
protected void decodeBody() {
name = bodyData.getString("name","");
age = bodyData.getInteger("age",0);
}
}
三:定义返回json
{
"mId": 101,
"code": 200,
"name":"res",
"info":"ininii"
}
四:定义返回编码类,继承AbstractDownMessage
public class DemoResponse extends AbstractDownMessage {
private String name;
private String info;
public DemoResponse(short mId,String name,String info){
messageId = mId;
this.name = name;
this.info = info;
}
@Override
protected void encodeBody() {
bodyData.put("name",name);
bodyData.put("info",info);
}
}
五,定义handler,实现接口 InterHandler
1 public class DemoHandler implements InterHandler {
2 @Override
3 public void handler(AbstractUpMessage up, HttpServerResponse resp) {
4 //上传参数
5 DemoRequest request = (DemoRequest)up;
6 System.out.println("上传参数:"+ request.name + "-" + request.age);
7
8 //返回数据
9 String n = "cscscs---";
10 String in = "info ---";
11 //编码返回json
12 DemoResponse response = new DemoResponse(getMessageId(),n,in);
13 response.encode();
14 resp.end(response.SendMessage());
15 }
16
17 @Override
18 public short getMessageId() {
19 return HandlerCode.DEMO_V1;
20 }
21 }
六:加载handler。定义一个配置类Configure,初始化handler
public class Configure {
private static final Configure ourInstance = new Configure();
public static Configure getInstance() {
return ourInstance;
}
public void init(){
initHandler();
}
private void initHandler(){
HandlerManager.getInstance().addHandler(new DemoHandler());
}
}
修改OnlineServer主函数,加载configure。
public static void main(String[] args){
Configure.getInstance().init();
VertxOptions vertxOptions = new VertxOptions();
Vertx vertx = Vertx.vertx(vertxOptions);
//部署http服务器
vertx.deployVerticle(HttpServerVerticle.class.getName(),
new DeploymentOptions().setInstances(VertxOptions.DEFAULT_EVENT_LOOP_POOL_SIZE), res -> {
if(res.succeeded()){
logger.warn("服务端部署成功----");
}else {
logger.error("服务端部署失败---" + res.cause());
}
});
}
七:修改 MessageRecognizer 添加解码json的类
public class MessageRecognizer implements IMessageRecognizer {
@Override
public MessageFactory recognize(short messageId) {
switch (messageId){
case HandlerCode.DEMO_V1: return new DemoRequest();
default:return null;
}
}
}
八:启动服务,调用接口试试


成功!!!!
项目结构:

Vertx 实现webapi实战项目(五)的更多相关文章
- Vuejs实战项目五:数据列表
1.在EasyMock 中添加数据列表模拟接口 请求url:/suyuan/list 请求方式:get 描述:数据列表 mock.js配置: 例: { "code": 2000, ...
- C# WebApi+Task+WebSocket实战项目演练(四)
一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的第四部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理 ...
- ASP.NET WebAPI数据传输安全HTTPS实战项目演练
一.课程介绍 HTTPS是互联网 Web 大势所趋,各大网站都已陆续部署了 HTTPS . 全站HTTPS时代,加密用户与网站间的交互访问,在客户端浏览器和Web服务器之间建立安全加密通道,一般情况 ...
- .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...
- .NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务
连着两天更新叙述性的文章大家可别以为我转行了!哈哈!今天就继续讲讲我们的.NET Core实战项目之CMS系统的教程吧!这个系列教程拖得太久了,所以今天我就以菜单部分的增删改查为例来讲述下我的项目分层 ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...
- .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...
- .NET Core实战项目之CMS 第九章 设计篇-白话架构设计
前面两篇文章给大家介绍了我们实战的CMS系统的数据库设计,源码也已经上传到服务器上了.今天我们就好聊聊架构设计,在开始之前先给大家分享一下这几天我一直在听的<从零开始学架构>里面关于架构设 ...
- .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI
作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...
随机推荐
- OpenAI的GPT-4o:普通人的AI秘书来了
1. 惊艳时刻:AI比你想象的更"人性" 早餐时,张三正埋头刷推送,一篇关于OpenAI发布GPT-4o的文章瞬间点燃了他的好奇心.这个AI简直是科技圈的惊雷!竟然可以像真人一样说 ...
- nginx集群同步方案
之前公司同事写过rsync加触发nginx reload脚本,适合nginx配置内容完全一致的情况. 今天写一个同步指定文件的脚本,修改完主服务器.使用scp传输到其他nginx服务器上重启NGINX ...
- CoreOS 手动升级篇
说到升级...通常肯定会以下2个步骤: 检查是否有新版本. 下载和安装新版本. 在 CoreOS 中也一样,我们先来看下在 CoreOS 中对应的命令: # 检查是否有新版本 update_engin ...
- 《机器人SLAM导航核心技术与实战》先导课:如何安装Ubuntu系统
<机器人SLAM导航核心技术与实战>先导课:如何安装Ubuntu系统 视频讲解 [先导课]2.如何安装Ubuntu系统-视频讲解 [先导课]2.1.如何安装Ubuntu系统-操作系统概念- ...
- CH9121default与classical设置方法
SYN发送间隔调整方法: 网口连接设备后双击设备列表中要配置的设备在扩展参数中单击获取扩展参数,在超时处理模式选项选择Classical然后执行设置扩展参数,最后点击复位模块后生效(仅TCP CLIE ...
- 全网最详细的CM311-1A魔百和刷Armbian教程
CM311-1A魔百和搭载了晶晨S905L3A芯片(实质上是S905X2的定制版本,两者在性能上并无显著差异).然而,遗憾的是,关于这款设备的网络教程相对较少,导致我在自学过程中遇到了不少挑战和障碍. ...
- MySQL 中 EXISTS 和 IN 的区别是什么?
在 MySQL 中,EXISTS 和 IN 都用于在子查询中进行条件判断,但它们的使用场景和性能有一定区别.以下是 EXISTS 和 IN 的主要区别: 1. 功能和用法 EXISTS: EXISTS ...
- 2K star!三分钟搭建企业级后台系统,这款开源Java框架绝了!
2K star!三分钟搭建企业级后台系统,这款开源Java框架绝了! "LikeAdmin Java是基于Spring Boot + Mybatis Plus + Vue 3的快速开发平台, ...
- SpringBoot3启动报错 java.lang.ClassNotFoundException: java.text.ListFormat
问题 在使用SpringBoot3创建web项目的时候日志报错java.lang.ClassNotFoundException: java.text.ListFormat. 具体报错如下: java. ...
- 【HUST】网络攻防实践|TCP会话劫持+序列号攻击netcat对话
文章目录 一.前言 1. 实验环境 2. 攻击对象 3. 攻击目的 4. 最终效果 docker的使用 新建docker docker常用指令 二.正式开始 过程记录 1. ARP欺骗 2. 篡改数据 ...