如何在java.util.Map中转换google.protobuf.Struct字段<;字符串,对象>;?
我有一个消息定义的QUOTE_item.proto文件,它有一个google.protobuf.Struct字段来解析元数据JSON如何在java.util.Map中转换google.protobuf.Struct字段<;字符串,对象>;?,java,spring,spring-boot,grpc,proto,Java,Spring,Spring Boot,Grpc,Proto,我有一个消息定义的QUOTE_item.proto文件,它有一个google.protobuf.Struct字段来解析元数据JSON message QuotationItemEntry { // Other fields google.protobuf.Struct metadata = 15; } 元数据字段也在Java实体类中定义 public class QuotationItem { // Other entity fields private Map
message QuotationItemEntry {
// Other fields
google.protobuf.Struct metadata = 15;
}
元数据字段也在Java实体类中定义
public class QuotationItem {
// Other entity fields
private Map<String, Object> metadata;
}
公共类QuotationItem{
//其他实体字段
私有地图元数据;
}
我想使用spring boot应用程序存储gRPC请求中传递的QuotationItemEntry对象,但无法将
google.protobuf.Struct
字段转换为java.util.Map,在java中,google.protobuf.Struct
的字段值在其本机表示中不受支持。相反,它们由com.google.protobuf.Value
包装。因此,使用google.protobuf.Struct#getFieldsMap()
方法,结果是一个Map
。您需要手动填充条目值。在Java中,google.protobuf.Struct
的字段值在其本机表示形式中不受支持。相反,它们由com.google.protobuf.Value
包装。因此,使用google.protobuf.Struct#getFieldsMap()
方法,结果是一个Map
。您需要手动填充条目值。我认为您可以通过元数据键进行流式处理,并将它们收集为映射。这可以解决你的问题
public Map<String, String> getMetadataMap(Metadata metadata) {
Map<String, String> metadataMap = metadata.keys().stream().collect(
Collectors.toMap(
key -> key,
key -> metadata.get(Metadata.Key.of(key,
Metadata.ASCII_STRING_MARSHALLER))));
return metadataMap;
}
公共映射getMetadataMap(元数据){
Map metadataMap=metadata.keys().stream().collect(
汤姆(
键->键,
key->metadata.get(metadata.key.of(key,
Metadata.ASCII_STRING_MARSHALLER));
返回元数据映射;
}
我认为您可以对元数据键进行流式处理,并将它们收集为地图。这可以解决你的问题
public Map<String, String> getMetadataMap(Metadata metadata) {
Map<String, String> metadataMap = metadata.keys().stream().collect(
Collectors.toMap(
key -> key,
key -> metadata.get(Metadata.Key.of(key,
Metadata.ASCII_STRING_MARSHALLER))));
return metadataMap;
}
公共映射getMetadataMap(元数据){
Map metadataMap=metadata.keys().stream().collect(
汤姆(
键->键,
key->metadata.get(metadata.key.of(key,
Metadata.ASCII_STRING_MARSHALLER));
返回元数据映射;
}