Java 当目标是Protobuf生成器时,如何在ModelMapper中添加自定义映射?
我正在尝试将源DTO映射到协议缓冲区对象。但是,源DTO中字段的名称与协议缓冲区对象中的名称不匹配,因此我需要添加自定义映射。我看到了两种方法,但两种方法都有问题。这个问题都源于java协议缓冲区中的构建器是最终的,所以在尝试添加自定义映射时,我总是遇到“无法映射最终类型”的问题。这样做的结果是,似乎不可能为目标为protobuf对象的任何对象添加自定义映射 因为ModelMapper为Protobuf创建了一个完整的库,所以我假设这里一定有一些解决方法,但我找不到它 所讨论的值需要从Long映射到Int64Value 我尝试过的解决方案:Java 当目标是Protobuf生成器时,如何在ModelMapper中添加自定义映射?,java,protocol-buffers,modelmapper,Java,Protocol Buffers,Modelmapper,我正在尝试将源DTO映射到协议缓冲区对象。但是,源DTO中字段的名称与协议缓冲区对象中的名称不匹配,因此我需要添加自定义映射。我看到了两种方法,但两种方法都有问题。这个问题都源于java协议缓冲区中的构建器是最终的,所以在尝试添加自定义映射时,我总是遇到“无法映射最终类型”的问题。这样做的结果是,似乎不可能为目标为protobuf对象的任何对象添加自定义映射 因为ModelMapper为Protobuf创建了一个完整的库,所以我假设这里一定有一些解决方法,但我找不到它 所讨论的值需要从Long映
mapper.registerModule(新ProtobufModule());
typeMap(SourceDTO.class、Target.Builder.class)
.addMappings(map->map.map(src->src.getField(),(dest,val)->dest.setTargetField(Int64Value.newBuilder().setValue((Long)value).build());
由于无法映射最终类型com.package.Target$Builder,该解决方案失败。
mapper.registerModule(新ProtobufModule());
typeMap(SourceDTO.class、Target.Builder.class)
.addMappings(新属性映射(){
@凌驾
受保护的void configure(){
map().setTargetField(Int64Value.newBuilder().setTargetValue(source.getField()).build());
}
});
由于无法映射最终类型com.google.protobuf.Int64Value$Builder,该解决方案失败。
我看到解决方案再次出现,我使用使用(IntConverters.LONG\u VALUE\u TO\u LONG)
来解决Int64Value$Builder
是最终解决方案的问题,但这些解决方案要求我使用方法引用来解决类型问题,我不能对Target.Builder::setTargetValue
进行方法引用,因为这是一个不明确的方法引用,因为该方法重载了。(一个带有Int64Value参数,另一个带有Builder参数)
在我看来,这最后一个类型限制使得映射到目标协议缓冲区变得不可能。以前有人对此争论过并找到了解决办法吗