Java protobuf parseFrom遇到While parsing a protcol message...

文章讲述了在处理RabbitMQ消息时,由于生产端使用JsonFormat将JSON格式的字符串发送至消息中间件,而消费端预期接收byte[]导致的解析错误。解决方法是先将接收到的字节转换为字符串,然后使用JsonFormat.parser()进行解析。
摘要由CSDN通过智能技术生成

错误信息:

While parsing a protocol message, the input ended unexpectedly in the middle of a field. This could mean either that the input has been truncated or that an embedded message misreported its own length.

出现这个错误有很多种,

我遇到这个错误的原因:

消息中间件是rabbitmq, 消息的生产端发送的消息并不是toByteArray 处理后到rabbitmq的,而是通过JsonFormat.printer().print() 处理过的json格式的字符串发送到rabbitmq。 消费端如果是直接parseFrom  byte[] 格式的数据就会报上面的错误。

如何解决:

通过

body 为byte[] 类型

String json = new String(body); // 转字符串

Message builder = TestProto.Msg.newBuilder();

JsonFormat.parser().merge(json, builder);

TestProto.Msg msg = (TestProto.Msg) builder.build();

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值