Vertx 实现webapi实战项目(二)
消息解析:消息序列化和反序列化---上传json解析和返回json编码。
整理下工程项目
一:实现消息接口,在imp文件夹下新建接口MessageFactory
1 /****** 2 * 消息编码/解码 3 * *******/ 4 public interface MessageFactory { 5 void decode(short apiCode, JsonObject body, HttpServerRequest request); 6 7 void encode(); 8 }
二:实现一个主类
1 public abstract class AbstractMessage implements MessageFactory{ 2 protected JsonObject bodyData; 3 4 protected short messageId = -1; 5 6 //上传json解析 7 @Override 8 public void decode(short mId,JsonObject body, HttpServerRequest request){ 9 this.bodyData = body; 10 11 messageId = mId; 12 13 decodeMessage(); 14 } 15 16 //返回json编码 17 @Override 18 public void encode(){ 19 encodeMessage(); 20 } 21 22 protected abstract void decodeMessage(); 23 24 protected abstract void encodeMessage(); 25 26 public static JsonObject decodeUpMessage(Buffer body){ 27 if(body == null) 28 return null; 29 30 try { 31 return body.toJsonObject(); 32 }catch (DecodeException es){ 33 return null; 34 } 35 } 36 }
三:实现json解码和编码
1 //上传json解码 2 public abstract class AbstractUpMessage extends AbstractMessage{ 3 @Override 4 protected void decodeMessage() { 5 decodeBody(); 6 } 7 8 @Override 9 protected void encodeMessage() {} 10 11 protected abstract void decodeBody(); 12 }
1 //返回json编码 2 public abstract class AbstractDownMessage extends AbstractMessage { 3 protected int resultCode; 4 5 public AbstractDownMessage(){ 6 bodyData = new JsonObject(); 7 } 8 9 @Override 10 protected void decodeMessage() { 11 12 } 13 @Override 14 protected void encodeMessage(){ 15 bodyData.put("mId",messageId); 16 bodyData.put("code",resultCode); 17 18 encodeBody(); 19 } 20 21 protected abstract void encodeBody(); 22 23 public String SendMessage (){ 24 return bodyData.encode(); 25 } 26 }
到此消息解析完成