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

如何防止创建空对象

周楷
2023-03-14

我试图将每个列表都位于嵌套对象内的webservice模型映射到更简单的对象。

  1. 模型1
public class Parent {
   private Children children;
}

public class Children {
   private List<Child> children;
}

public class Child {
}
public class Parent2 {
   private List<Child2> children;
}

public class Child {
}

映射非常简单:

@Mappings({@Mapping(source = "entity.children.children", target = "children")})
Parent2 parentToParent2(Parent entity);
@InheritInverseConfiguration
Parent parent2ToParent(Parent2 entity);

映射工作正常,除了一个问题。当我将带有null子级的父母映射到父母2并返回父母时,儿童对象是用空列表创建的。有什么方法可以防止这种情况吗?

共有1个答案

华凯捷
2023-03-14

您可以使用映射器装饰器或AfterMapping钩子来实现这一点。

装饰:

public abstract class MapperDecorator implements Mapper {

    private final Mapper delegate;

    public MapperDecorator(Mapper delegate) {
        this.delegate = delegate;
    }

    @Override
    public Parent parent2ToParent(Parent2 entity) {
        Parent parent = delegate.parent2ToParent(entity);

        if (entity.getChildren() == null) {
            parent.setChildren(null);
        }

        return parent;
    }
}

映射器:

@org.mapstruct.Mapper
@DecoratedWith(MapperDecorator.class)
public interface Mapper {
    @Mapping(source = "entity.children.children", target = "children")
    Parent2 parentToParent2(Parent entity);

    @InheritInverseConfiguration
    Parent parent2ToParent(Parent2 entity);

    Child2 childToChild2(Child entity);

    Child child2ToChild(Child2 entity);
}

映射器:

@org.mapstruct.Mapper
public abstract class Mapper {
    @Mapping(source = "entity.children.children", target = "children")
    public abstract Parent2 parentToParent2(Parent entity);

    @InheritInverseConfiguration
    public abstract Parent parent2ToParent(Parent2 entity);

    public abstract Child2 childToChild2(Child entity);

    public abstract Child child2ToChild(Child2 entity);

    @AfterMapping
    public void afterParent2ToParent(Parent2 source,
                                     @MappingTarget Parent target) {
        if (source.getChildren() == null) {
            target.setChildren(null);
        }
    }
}
 类似资料:
  • 问题内容: 传递0作为限制参数可以防止尾随空字符串,但是如何防止 前导 空字符串呢? 例如 结果是带有“”,“ Test”,“ Stuff”的数组。 是的,我知道我可以滚动自己的令牌生成器…但是StringTokenizer的API文档说 “ StringTokenizer是一个遗留类,出于兼容性原因保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人都使用拆分” 问题答案: 您最好的选择可能

  • 问题内容: 我正在编写一个在Linux上运行的Java应用程序(使用Sun的JDK)。它一直在创建目录,我想防止这样做。有什么方法可以阻止Java创建这些文件? 问题答案: 尝试JVM选项 -XX:-UsePerfData 更多信息 来自链接https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html的以下内容可能会有所帮

  • 我已经在继承代码上工作了几天了,我正试图了解maven是如何工作的,以及为什么要按原样配置项目。该项目使用Jetty作为http服务器,并提供Angular应用程序,此外还使用Jersey为Angular应用程序提供RESTfulendpoint。项目目录为: 作为部署过程的一部分,我被告知设置maven,以便将项目打包为. war。为此,我有以下内容: 当我运行mvn安装时,在我的src/mai

  • 我查阅了关于单元素元组的文档,对它如何防止空间泄漏有点困惑,这让我怀疑我对Haskell内存模型和/或垃圾收集器的工作原理一无所知。 引用文件,他们说: Solo最重要的特性是可以强制其“外部”(通常通过模式匹配)而不强制其“内部”,因为它被定义为数据类型而不是新类型。在编写函数以从数据结构中提取值时,这可能很有用。假设您编写了数组的一个实现,并且只提供此函数来索引数组: 这实际上会导致空间泄漏。

  • 我正在使用org.AsynchTtpClient发布异步请求。 在关闭tomcat时,我得到了以下日志: 严重:web应用程序[/test]似乎启动了一个名为[pool-1-thread-1]的线程,但未能停止它。这很有可能造成内存泄漏。 2017年7月4日10:53:00 AM org.apache.catalina.loader.webappclassloaderbase clearRefer

  • 我有一个Spring批处理应用程序,可以从外部源读取数据。但当作业运行时,它会尝试在源数据库的Batch_Job_实例表中创建和插入数据,但用户没有任何权限。如何防止在源数据库中创建这些表? 有人能帮忙吗? 下面是错误日志 16:46:00,491ERROR[org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler](