【发布时间】:2021-12-27 20:30:26
【问题描述】:
我有一个管道有两种节俭消息进来
我可以尝试单独反序列化每一个,看看它是否会出错
TDeserializer deserializer = new TDeserializer(new TSimpleJSONProtocol.Factory());
try {
Type1Msg t1 = new Type1Msg();
deserializer.deserialize(t1, json, "UTF-8");
return t1
} catch() {
}
try {
Type2Msg t2 = new Type2Msg();
deserializer.deserialize(t1, json, "UTF-8");
return t2
} catch() {
}
有没有一种惯用的方法可以在 thrift 中实现反序列化多种消息类型?
【问题讨论】:
-
我从未使用过 Thrift,但快速浏览一下 Javadoc 建议您需要
TUnion -
..但它的抽象和构造函数是受保护的;(;(;(并且 javadoc 很差)
-
如果,您知道(消息)类名,您可以使用
TBase obj = (TBase) Class.forName(className).getConstructor().newInstance();like here(eof) ..但您可能不知道!(?) -
不同的方法:为什么你(只有)一个管道(/端点)用于两种消息类型!? ;)(如果您无法从“端点”推断,请选中从“消息/有效负载”推断它的选项)
-
..你分别用
t1和/或t2做什么?