java使用中Protobuf3 Any类型转json (解决Cannot find type for url: type.googleapis.com)

17 篇文章 0 订阅

Protobuf是谷歌出品的一个数据协议框架,跟json相比,有独特的优点,这里不多说。

Protobuf3相比Protobuf2有很多改进。其中一个就any类型。有点类似java的泛型。也添加了Protobuf与json的互转,非常方便

如何转换json:

先添加jar支持,protobuf 转json的工具类在protobuf-java-util这个包中,通过maven引用进来

	<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util -->
		<dependency>
			<groupId>com.google.protobuf</groupId>
			<artifactId>protobuf-java-util</artifactId>
            <version>3.5.1</version>
		</dependency>

使用:

// 创建一个消息
		Message.Builder builder = Message.newBuilder();
//转换json
        String msgJson = JsonFormat.printer().print(builder);

 

这里要说的一点就是,当Protobuf转json时,如果你的.proto文件里面有any类型。在转换json时可能会遇到这样一个报错

这是因为你的any类型里面,有protobuf不认识的类型,所以报无法识别。

参考谷歌的文档,有一段这样写:

当你在使用protobuf转json时,如果含有any类型,需要显性注册该类型到JsonFormat中。

看代码:

// 未知的类型转json。需要添加TypeRegistry
			TypeRegistry typeRegistry = JsonFormat.TypeRegistry.newBuilder()
					.add(AddFriendReq.getDescriptor()).build();
			String msgJson = JsonFormat.printer()
					.usingTypeRegistry(typeRegistry).print(builder);

注册类型以后,便可以正常转换成json了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值