mapstruct protobuf3 映射一个地图
mapstruct protobuf3 mapping a map
我正在尝试使用 mapstruct 将我的 DTO 映射到生成的 protobuf class。
此 class 包含一个地图,但这会导致异常:
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableMap.putAll(Collections.java:1463)
我不知道如何绕过这个。
这是我的映射函数
@Mappings({
@Mapping(target = "profiles", source = "profiles"),
MyClassMessage.Builder convertToBuilder(MyClassDto myClassDto);
它生成此代码
if ( builder.getProfiles() != null ) {
Map<String, Object> map = stringInterpreterProfileMapToStringInterpreterProfileMessageMap( interpreterSettingDto.getProfiles() );
if ( map != null ) {
builder.getProfiles().putAll( map ); // <-- this cause the exception
}
}
不过我觉得应该是这样的 instread
if ( builder.getProfiles() != null ) {
Map<String, Object> map = stringInterpreterProfileMapToStringInterpreterProfileMessageMap( interpreterSettingDto.getProfiles() );
if ( map != null ) {
builder.putAllProfiles( map );
}
}
我应该如何告诉 mapstruct 这样做?
MapStruct 目前不支持此功能。但是,有一个开放的功能请求,请参阅问题 #1343
所以我找到的解决方案是
@Mapping(target = "mutableProfiles", source = "profiles"),
@Mapping(target = "profiles", ignore = true),
第一行将使用可变映射并添加集合
第二个会告诉 mapstruct 不要尝试映射配置文件,因为它已经完成了。
你可以这样做:
@Mappings({
@Mapping(target = "putAllProfiles", source = "profiles"),
MyClassMessage.Builder convertToBuilder(MyClassDto myClassDto);
我正在尝试使用 mapstruct 将我的 DTO 映射到生成的 protobuf class。 此 class 包含一个地图,但这会导致异常:
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableMap.putAll(Collections.java:1463)
我不知道如何绕过这个。
这是我的映射函数
@Mappings({
@Mapping(target = "profiles", source = "profiles"),
MyClassMessage.Builder convertToBuilder(MyClassDto myClassDto);
它生成此代码
if ( builder.getProfiles() != null ) {
Map<String, Object> map = stringInterpreterProfileMapToStringInterpreterProfileMessageMap( interpreterSettingDto.getProfiles() );
if ( map != null ) {
builder.getProfiles().putAll( map ); // <-- this cause the exception
}
}
不过我觉得应该是这样的 instread
if ( builder.getProfiles() != null ) {
Map<String, Object> map = stringInterpreterProfileMapToStringInterpreterProfileMessageMap( interpreterSettingDto.getProfiles() );
if ( map != null ) {
builder.putAllProfiles( map );
}
}
我应该如何告诉 mapstruct 这样做?
MapStruct 目前不支持此功能。但是,有一个开放的功能请求,请参阅问题 #1343
所以我找到的解决方案是
@Mapping(target = "mutableProfiles", source = "profiles"),
@Mapping(target = "profiles", ignore = true),
第一行将使用可变映射并添加集合 第二个会告诉 mapstruct 不要尝试映射配置文件,因为它已经完成了。
你可以这样做:
@Mappings({
@Mapping(target = "putAllProfiles", source = "profiles"),
MyClassMessage.Builder convertToBuilder(MyClassDto myClassDto);