MapStruct将Protobuf(proto3)映射到Java POJO

MapStruct将Protobuf(proto3)映射到Java POJO,java,mapping,protocol-buffers,mapstruct,grpc-java,Java,Mapping,Protocol Buffers,Mapstruct,Grpc Java,我正试着从Protobuf映射到POJO。以下是POJO: public class CreateNodesAllDataDto { private List<UpsertNodeDto> tables; private List<UpsertColumnDto> columns; } 下面是协议: message UpsertNodeAllDataInput { repeated UpsertTableInput tables = 1; re

我正试着从Protobuf映射到POJO。以下是POJO:

public class CreateNodesAllDataDto {
    private List<UpsertNodeDto> tables;

    private List<UpsertColumnDto> columns;
}
下面是协议:

message UpsertNodeAllDataInput {
  repeated UpsertTableInput tables = 1;
  repeated UpsertColumnInput columns = 2;
}

message UpsertTableInput {
  string workspace_id = 1;
  string id = 2;
  string name = 3;
}
你明白了

现在的问题是MapStruct没有映射Protobuf中的
重复的
字段,因为生成的Java文件中这些字段的getter是name xxx list。例如,从
UpsertNodeAllDataInput
获取
表的方法是
input.getTablesList()
,而不是
input.getTables()
,显然MapStruct无法识别这一点

首先,肯定没有Protobuf生成问题,因为一个类似用途的包在转换
UpsertNodeAllDataInput
createNodeAllDataDTO
时工作。这也不是MapStruct安装的问题,因为它适用于POJO到POJO的映射。问题只是上面描述的一个

我四处寻找了一段时间,只找到了将POJO映射到Protobuf的答案。像这样的事情似乎不起作用

message UpsertNodeAllDataInput {
  repeated UpsertTableInput tables = 1;
  repeated UpsertColumnInput columns = 2;
}

message UpsertTableInput {
  string workspace_id = 1;
  string id = 2;
  string name = 3;
}