java - 如果属性为空,如何让 MapStruct 不生成包装器对象?

标签 java mapstruct

我有一些代码使用 MapStruct 将 from.id 映射到 to.ref.id 结构。当from.id 为null 时,MapStruct 将创建一个新的Reference 实例并将其id 设置为null。我如何让它不生成包装器类,并将 to.ref 设置为 null?

我已经为映射的 nullValueCheckStrategynullValuePropertyMappingStrategy 尝试了不同的值,但对于这种情况,这些值似乎没有任何区别。

这是我的代码,为简洁起见省略了 getter 和 setter。

public class Example {
    public static void main(String[] args) {
        System.out.println(Mappers.getMapper(MyMapper.class).get(new From()));
    }
}

@Mapper
interface MyMapper {
    @Mapping(source = "id", target = "ref.id")
    To get(From from);
}

class From {
    private String id;
}

class To {
    private Reference ref;
}

class Reference {
    private String id;
}

最佳答案

你可以试试这样的东西

如下创建一个新的映射器。

@Mapper
public interface Mapper1 {
    @Mapping(source = "id", target = "id")
    Reference get(String id);
}

然后更新您退出的映射器以像这样使用这个新的映射器

@Mapper(uses = Mapper1.class)
public interface MyMapper {

    @Mapping(source = "from.id", target = "ref")
    To get(From from);
}

关于java - 如果属性为空,如何让 MapStruct 不生成包装器对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54945381/

相关文章:

java - java中基于属性文件的条件模式

java - MapStruct 不会通过 Spring-boot 测试 Gradle Junit5 自动写入

java - MapStruct:将嵌套对象属性映射到属性

Mapstruct 没有为我的映射器接口(interface)之一生成实现。有没有办法知道原因?

java - 将Json数组反序列化为对象列表

java - 显示数组排序

java - Project Lombok 是否与使用getter 和setter 的数据封装相矛盾?

Java Tapestry : Clearing a count value after a t:if test

java - BufferedReader 将什么字符解释为流的结尾?

java - 将参数传递给自定义映射函数