让thrift兼容原生json数据调用的解决方案

本文介绍了一种使Thrift服务兼容原生JSON数据的方法。通过封装,可以在不修改原有Thrift接口的情况下,支持客户端使用JSON格式进行调用,并正确处理返回数据。
部署运行你感兴趣的模型镜像

让thrift兼容原生json数据调用的部分解决方案 
通常使用thrift时,服务端与客户端都依赖thrift提供的方法,有一些场景没办法直接引入thrift提供的文件,只能使用如 json之类格式传输,可能导致之前的thrift接口需要修改来支持。 
这里使用服务端采用java编写,与客户端也是采用了thrift协议调用,同时我做了一些封装来支持原生json调用。

1. 先看看使用场景
struct UserInfo { 
1: optional string name; 
2: optional i32 age;

service Services{ 
UserInfo blntest(1:UserInfo ui) 
}
客户端调用blntest方法时需要能发送对应的json数据如: {"name":"wxd","age":19} ,服务端不修改原来的thrift实现,并能正常解析json数据调用blntest并返回json数据。

2. 思路:


1):{"name":"wxd","age":19}转为对应的UserInfo请求对象。 
2):利用thrift 提供的TServiceClient 调用 blntest 方法,这里只需将原来的远程调用修改一下,也就是修改不做远程调用,直接把流对接到服务端的输入输出流。 
3):返回数据UserInfo转为json数据。

3. 讲解: 
1与3 这一步相对简单,很多第三方json工具都能做到。 
主要修改点在是第二点:在service生成的client类中,有send_*** 方法,如blntest方法,客户需要调用 send_blntest方法发送请求数据,所以获取send_*** 方法输出的数据, 作为服务端process的输入流数据。 service中有 ***__result类 用在process返回数据后读取返回的数据。

使用curl模拟客户端json请求 

curl -l -H "method:blntest" -H "Content-Type: application/json" -X POST -d '{"hb":{"page":{"rowNumber":10,"lastFlagInt":0,"lastFlagInt2":0,"pageNumber":0},"device":"ios20","platform":1,"version":"1.0","chl":"myapp"},"i":0}' http://127.0.0.1:8081/apij2j.do

具体实现demo参考  https://github.com/donnie4w/thriftjson

thriftjson项目算是一个demo,为了方便测试,服务端采用springboot. 启动之后便可以curl模拟测试。

转载于:https://my.oschina.net/u/932049/blog/1542750

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值