Mapper函数空参数检查
Mapper function null parameter check
我将 MapStruct 与 Lombok 和构建器模式结合使用。
我有一个问题,即 MapStruct 正在对生成的映射器函数内的所有参数进行显式空检查,并在所有参数为空的情况下提前退出,例如:
// Object A
@Value
@Builder(builderClassName = "Builder")
public class SourceA{
private int a;
}
// Object B
@Value
@Builder(builderClassName = "Builder")
public class SourceB{
private int a;
}
// Object C
@Value
@Builder(builderClassName = "Builder")
public class SourceC{
private int a;
}
// Object Target
@Value
@Builder(builderClassName = "Builder")
public class Target{
private int a;
private int b;
private int c;
}
// Mapper
@Mapper(componentModel = "spring")
public interface Mapper {
@Mappings({
@Mapping(target = "a", source = "sourceA.a"),
@Mapping(target = "b", source = "sourceB.a"),
@Mapping(target = "c", source = "sourceC.a")
})
Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC);
};
// mapstruct impl
// Auto Generated by MapStruct!
public class MapperImpl implements Mapper {
public Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC){
// Problamatic line
if (sourceA == null && sourceB == null && sourceC == null) {
return null;
} else {
Target.Builder builder = Target.builder();
// map objects
return builder.builder();
}
}
}
我想实现 MapStruct 没有实现完整的 null 检查。即使所有参数都为空,它也应该设置整个构建器,并在构建器进行空检查的最后调用构建(如果有的话)。
为了实现您正在寻找的目标,请始终创建您需要使用的目标对象的默认实例 NullValueMappingStrategy
。
在您的映射器上,您可以执行 @Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
当您执行此操作时,生成的代码应如下所示:
public class MapperImpl implements Mapper {
public Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC){
Target.Builder builder = Target.builder();
// map objects
return builder.builder();
}
}
我将 MapStruct 与 Lombok 和构建器模式结合使用。 我有一个问题,即 MapStruct 正在对生成的映射器函数内的所有参数进行显式空检查,并在所有参数为空的情况下提前退出,例如:
// Object A
@Value
@Builder(builderClassName = "Builder")
public class SourceA{
private int a;
}
// Object B
@Value
@Builder(builderClassName = "Builder")
public class SourceB{
private int a;
}
// Object C
@Value
@Builder(builderClassName = "Builder")
public class SourceC{
private int a;
}
// Object Target
@Value
@Builder(builderClassName = "Builder")
public class Target{
private int a;
private int b;
private int c;
}
// Mapper
@Mapper(componentModel = "spring")
public interface Mapper {
@Mappings({
@Mapping(target = "a", source = "sourceA.a"),
@Mapping(target = "b", source = "sourceB.a"),
@Mapping(target = "c", source = "sourceC.a")
})
Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC);
};
// mapstruct impl
// Auto Generated by MapStruct!
public class MapperImpl implements Mapper {
public Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC){
// Problamatic line
if (sourceA == null && sourceB == null && sourceC == null) {
return null;
} else {
Target.Builder builder = Target.builder();
// map objects
return builder.builder();
}
}
}
我想实现 MapStruct 没有实现完整的 null 检查。即使所有参数都为空,它也应该设置整个构建器,并在构建器进行空检查的最后调用构建(如果有的话)。
为了实现您正在寻找的目标,请始终创建您需要使用的目标对象的默认实例 NullValueMappingStrategy
。
在您的映射器上,您可以执行 @Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
当您执行此操作时,生成的代码应如下所示:
public class MapperImpl implements Mapper {
public Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC){
Target.Builder builder = Target.builder();
// map objects
return builder.builder();
}
}