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

使用mastruct将null设置为目标

璩珂
2023-03-14

我正在使用mapstruct,我想知道是否有任何方法可以为某些目标属性设置空值。例如

public class MySource {
    private String prop1;
    private String prop2;

    public MySource() {
        // Initialization.
    }

    // Getters - Setters.
}

public class MySourceDto {
    private String prop1;
    private String prop2;

    public MySourceDto() {
        // Initialization.
    }

    // Getters - Setters.
}

@Mapper
public interface MySourceMapper {

    @Mappings({
        @Mapping(target = "prop1", propertyToSetNull = null)})
    public MySourceDto toView(MySource mySource);

}

我希望上面的源代码、dto和mapper能够生成下面的源代码,

@Component
public class MySourceMapperImpl implements MySourceMapper {

    @Override
    public MySourceDto toView(MySource mySource) {
        if ( mySource == null ) {
            return null;
        }

        MySourceDto mySourceDto = new MySourceDto();

        mySourceDto.setProp1( mySource.getId() );
        mySourceDto.setProp2( null );

        return mySourceDto;
    }
}

共有2个答案

李浩邈
2023-03-14

此外,您可以忽略此属性的映射:

@Mapping(target = "prop1", ignore = true)

这会将该值设置为默认值,在您的情况下为null

仲俊豪
2023-03-14

您可以使用@Map(Target="prop1",表达式="java(null)")来实现这一点。

您可以在此处的参考指南中找到有关expression的更多信息。

目前,只有java支持作为表达式语言,MapStruct只需将您在括号中编写的内容直接应用于setter,实现将与您的示例完全相同。

 类似资料:
  • 问题内容: 我正在使用JSF2.0创建Web应用程序,其中在mysql中,我使用的数据类型为存储图像。 要插入值,我正在使用PreparedStatement,如下所示。 但是我收到错误消息 Stacktrace的某些部分是 我相信以上错误仅供参考 我的问题是如何将二进制数据设置为Null或Nothing? 问题答案: 这些天出了什么问题?我问了问题后就得到了解决方案:( 做到了。

  • 问题内容: 我有以下映射 我如何配置我的Mapper或Mappings,以便当childId为null时,将目标Entity.child设置为null而不是Entity.child.id? 问题答案: 对于我来说,找到的不是一个非常优雅的解决方案,而是可行的解决方案。 首先将接口更改为抽象类,然后添加

  • 问题内容: 我正在使用Spring将JMS连接工厂注入到我的Java应用程序中。由于仅在生产环境中才需要该工厂,但是在开发过程中却不需要,因此我将Bean定义放入单独的XML中,并将其包含在主applicationContext.xml中。在生产环境中,此额外文件包含常规bean定义。在我的本地开发环境中,我希望此bean为null。当Spring遇到一个未知的引用ID时,试图完全完全删除Bean

  • 问题内容: 使用Zend_Db执行UPDATE和INSERT查询时,我经常需要设置等于NULL的值(不是”)。但是,Zend_Db :: insert()和Zend_Db :: update()的默认行为似乎是将空值转换为空字符串(’‘)并照此放入数据库。 有谁知道如果php中的值为空,则实际上强制将NULL值放入字段的方法吗? 问题答案: 尝试将受影响的字段设置为:

  • 我一直在使用空布局,很多人会说不应该这样做。有更好的办法吗? 以下是一些代码示例:

  • 编辑2: 似乎调用实际上是在取消数据库中的字段!但是,调用并没有像预期的那样用空字段刷新POJO。我在之后验证了lastName的为null,但是调用没有使该值为null。