如何使用 mapstruct 将值从 protobuf 对象映射到 java 字符串

How to map values from protobuf object to java String with mapstruct

假设我有以下 protobuf 文件

message Body{
   map<string, string> message_body 1;
}

我想做的是使用 mapstruct 将其映射到 Java 字符串。像这样

@Mapping(target = "messageBody", source = "messageBody", qualifiedByName = "logBodyToMessageBody")
MessageBody logMessageToMessageBody(LogMessageProtoBuf.Body body);

我的 MessageBody class 看起来像这样

public class MessageBody implements Serializable {

@Column
private String messageBody

}

假设我在下面使用以下自定义映射器

  @Named("logBodyToMessageBody")
    public String logBodyToMessageBody(LogMessageProtoBuf.Body body) {
        return body.toString();

每次我尝试构建项目时,mapstruct 都告诉我它无法映射字段,我应该使用自定义映射器。我正在使用自定义映射器,但它甚至没有达到它看到或不喜欢自定义映射器的程度。有人可以帮我实现自定义映射器,我可以从我的原型文件中获取值并将其转换为上面的 java 等价物吗?

之所以不起作用是因为logBodyToMessageBody方法在LogMessageProtoBuf.BodyString之间。但是,在您的映射器定义中,您将 messageBodyLogMessageProtoBuf.Body 映射到 MessageBody。您的方法不适用于本例

如果您升级到 1.4,您将收到一条不同的消息,指出由于缺少 qualifiedByName.

而没有适用的方法