地图列表<;字符串>;使用从Java POJO到Protobuf(proto3)的Mapstruct
我正在尝试将一些POJO从Java映射到Protobuf(proto3)。其中一些包含列表。虽然用POJO映射列表(例如List)没有问题,但我得到了一个不支持的操作异常 带有地图列表<;字符串>;使用从Java POJO到Protobuf(proto3)的Mapstruct,java,protocol-buffers,mapstruct,proto3,protobuf-java,Java,Protocol Buffers,Mapstruct,Proto3,Protobuf Java,我正在尝试将一些POJO从Java映射到Protobuf(proto3)。其中一些包含列表。虽然用POJO映射列表(例如List)没有问题,但我得到了一个不支持的操作异常 带有列表的示例(此操作正确): 带有列表的示例(这不起作用): 此外,我还有一些用于生成器的映射器: public ResponseProtobuf.Builder responseBuilder() { return ResponseProtobuf.newBuilder(); } public ProductPr
列表的示例(此操作正确):
带有列表的示例(这不起作用):
此外,我还有一些用于生成器的映射器:
public ResponseProtobuf.Builder responseBuilder() {
return ResponseProtobuf.newBuilder();
}
public ProductProtobuf build(ProductProtobuf.Builder builder) {
return builder.build();
}
问题是MapStruct将使用getProductsList().addAll()
。为了避免这种情况,您应该使用CollectionMappingStrategy.ADDER_PREFERRED
CollectionMappingStrategy
。查看mapstruct示例repo中的
简而言之,您需要添加:
@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED,
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
给你的地图绘制者
关于构建器的一个信息是,如果您使用的是1.3.0.Beta1,您将不需要它,因为MapStruct中现在已经提供了对它的开箱即用支持
注意:MapStruct中存在一个无法正确使用ProtocolStringList
的错误。此错误已在1.3.0.Beta1中修复。如果您尝试使用此版本,它应该可以工作(如果您的产品列表是字符串)我忘了写我已经使用过的:@Mapper(collectionMappingStrategy=collectionMappingStrategy.ADDER\u首选,nullValueCheckStrategy=nullValueCheckStrategy.ALWAYS)
此问题仅在列表中出现,因为MapStruct将创建ProtocolStringList(而不是String)类型的对象,这是一个接口,因此无法使用。请使用此信息更新您的问题。我会用补丁更新答案,从Protobuf到javapojo怎么样?
public ResponseProtobuf.Builder responseBuilder() {
return ResponseProtobuf.newBuilder();
}
public ProductProtobuf build(ProductProtobuf.Builder builder) {
return builder.build();
}
@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED,
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)