当前位置: 首页 > 知识库问答 >
问题:

映射函数空参数检查

张献
2023-03-14

我正在结合Lombok和构建器模式使用MapSTRt。我有一个问题,即MapSTRt正在对生成的映射器函数中的所有参数进行显式空检查,并在所有参数为空的情况下提前退出,例如:

// 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,它也应该设置整个生成器,并在生成器进行null检查(如果有)时调用build。

共有1个答案

孔彭祖
2023-03-14

为了实现所需的目标,请始终使用NullValueMappingStrategy创建目标对象的默认实例

在mapper上,您可以执行@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();
    }
}
 类似资料:
  • 流接口中的映射函数定义如下: 函数参数列表与函数接口自己的规范一致 方法是 这意味着它需要一个T,但返回一个R。但我正在运行这个代码 奇怪的是,为什么它能工作,但论点类型似乎不匹配?没有简单的方法来解释它,但我的理解是,一个函数应该接受类型T的输入并返回类型R。当它在流中使用时,它接受类型String的输入并返回类型int(即String.length())。但是小溪。map被键入以返回与流相同的

  • 我对流图法有点困惑。有一些简单的源代码可以运行: map()签名:Stream map(函数 在我的选择中,我认为赋予文字的功能。stream()。map应该有1个参数,但是string::length没有任何输入参数,只返回int。 它看起来像word流调用字符串中的每个元素“word”。长度(),但我不知道该怎么做?为什么string::length签名不需要与函数签名(R apply(T))

  • 陈述 我想去 但是显然没有使用...因为它不是切肉刀,我想了解更多关于函数及其传递参数的方式。 所以我尝试附加一个使用map函数列表的所有元素。但在此之前,是一个方法,而不是一个方法。 最后一个映射函数返回TypeError: 我想知道是否可以将参数传递给使用的方法。感谢

  • 我想在sql语句中使用一个名为tags的参数: 我通过以下方式传递参数并执行语句: 如果我将语句更改为: 它抛出错误: 类org.springframework.jdbc.badsqlgrammareXception PreparedStatementCallback;错误的SQL语法[SELECT*FROM reply WHERE(?,?)@>array[2293,2294];嵌套异常是org.

  • 使用,并希望将常量/参数传递给自定义映射器 我的目的地具有 Map 类型的字段

  • 映射函数是一组可以连续应用于一个或多个元素列表的函数。 将这些函数应用于列表的结果将放在新列表中,并返回新列表。 例如, mapcar函数处理一个或多个列表的连续元素。 mapcar函数的第一个参数应该是一个函数,其余参数是应用函数的列表。 参数函数应用于导致新构造的列表的连续元素。 如果参数列表的长度不相等,则映射过程在到达最短列表的末尾时停止。 结果列表将具有与最短输入列表相同数量的元素。 例