scala - 使用 scala 动态访问 protobuf 字段名称
问题描述
我是 Scala 的新手。编写我的第一个应用程序。
我已经使用字段 email_id 和 phone_number 定义了我的 proto 文件,这是 grpc 调用的请求定义
我可以通过点运算符访问值,例如 params.emailId
现在我想做的是我有一组必填字段。我想检查带有输入请求参数的数组中定义的那些字段的值。
我如何访问此参数。{数组中的字段名称}以检查非空值。
使用以下代码获取错误:
val mandatoryFields = Array("emailId","phoneNumber")
println(params.emailId) //works
for (fields <- mandatoryFields) {
println(fields)
println(params.fields) // getting error
}
它具有函数“in.getFieldByNumber()”,您可以在其中按索引位置获取值,是否有任何可用的函数,如 getFieldByName() 或类似的东西。
解决方案
虽然距离提问日期已经很久了,但我不认为它是没有答案的。其实我有一个:
使用toPMessage
方法,您将拥有 protobuffer 案例类作为PMessage
对象的实例。然后,您可以检索Map[FieldDescriptor, PValue]
. 按名称查找字段值如下:
val fieldDescriptorPValueMap: Map[FieldDescriptor, PValue] = params.toPMessage.value
mandatoryFields.foreach(fieldName=>{
println(
fieldDescriptorPValueMap
.filter(entry => fieldName == entry._1.name)
.values
.head.as[String]
)
})
推荐阅读
- r - 提取 R 中多个不变自变量的系数和 p 值列表
- r - 在 R 中将多个数据集与多个工作表绑定
- c++ - 是否可以使用 C++17 内联成员强制跨 TU 的全局变量的初始化顺序?
- r - 为ggplot中的同类变量分配相似的颜色
- python-3.x - scrapy RuntimeError: 要使用 XPath 或 CSS 选择器,ItemLoader 需要用选择器实例化
- html - 如何在 Bootstrap 下拉列表的标签中显示所选项目?
- android - 将文件从 android 应用程序上传到我的 S3 存储桶
- java - 如何使用 GSON 反序列化数组数组
- spring-boot - Spring数据JPA-休眠多对多关系在链接实体表中插入null
- reactjs - 在反应中将格子链接令牌传递给客户端