MapStruct原型列表到Pojo映射

问题描述 投票:0回答:1

作为GRPC api的一部分,我试图将原型自动生成的类映射到pojo。这是.proto文件

message AccountModelProto
{
 repeated VerificationModelProto verification = 1;
}
message VerificationModelProto
{
    string status = 1;
    string comment = 2;
    string verificationType = 3;
    repeated VerificationAttributeModelProto verificationAttributes = 4;
}
message VerificationAttributeModelProto
{
    string type = 1;
    string label = 2;
    bool attributeStatus = 3;
}

以上代码的映射器是。我根据它引用了mapstruct提供的示例,我不需要提供VerificationModelProto到List的显式映射,但是我遇到了编译器错误

错误:无法将属性“集合验证”映射到“ VerificationModelProto VerificationList”。考虑声明/实现映射方法:“ VerificationModelProto map(Collection value)”。

@Mapping(source = "verification", target = "verificationList", qualifiedByName = "verificationModelToVerificationProtoMapping")
    AccountModelProto map(AccountModel accountModel);

@Named("verificationModelToVerificationProtoMapping")
default VerificationModelProto map (VerificationModel verificationModel)
{
    VerificationModelProto.Builder builder = VerificationModelProto.newBuilder()
                .setComment(verificationModel.getComment())
                .setStatus(verificationModel.getStatus().toString())
                .setVerificationType(verificationModel.getVerificationType());

    for(VerificationAttributeModel verificationAttributeModel: verificationModel.getVerificationAttributes())
    {
            builder.addVerificationAttributes(getVerificationAttributeBuilder(verificationAttributeModel));
    }
    return builder.build();
}

default VerificationAttributeModelProto getVerificationAttributeBuilder(VerificationAttributeModel verificationAttributeModel)
{
     VerificationAttributeModelProto.Builder builder = VerificationAttributeModelProto.newBuilder()
                .setAttributeStatus(verificationAttributeModel.getAttributeStatus())
                .setType(verificationAttributeModel.getType())
                .setLabel(verificationAttributeModel.getLabel());

   return builder.build();
}

如何解决这个问题。我将CollectionMappingStrategy添加为CollectionMappingStrategy.ADDER_PREFERRED。

mapstruct grpc-java protobuf-java
1个回答
0
投票

MapStruct示例存储库中有一个完整的示例,说明如何执行此操作?结帐this。该示例通过实现MapStruct使用的SPI(请参见here)来修改行为。该SPI可以单独维护,因此您也可以在其他protobuf项目中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.