在映射器/映射器配置级别上为映射类别设置nullValueMappingStrategy

时间:2019-03-28 21:11:39

标签: mapstruct

MapStruct文档中有关于为NullValueMappingStrategy.RETURN_DEFAULT选择的明智默认值的说法:

  

Bean映射:将返回一个“空”目标Bean,其中包含   常量和表达式除外,它们将在以下情况时填充   礼物。

     

原语:将返回原语的默认值,例如   boolean为false或int为0。

     

Iterables / Arrays:将返回一个空的Iterable。

     

地图:将返回一个空地图。

问题是,我们希望能够在@Mapper级别上指定,例如,Iterables应该具有NullValueMappingStrategy.RETURN_DEFAULT而不是基元。这样做的原因是,对于我们的用例,空的Iterable是明智的默认值,但对于int而言,0不是明智的默认值。我们希望不必例如声明:

    @IterableMapping(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)

对于我们正在映射的每个可迭代对象。

MapStruct是否提供一种在文档中找不到的干净方法?

1 个答案:

答案 0 :(得分:0)

我认为以上行实际上是文档中的复制粘贴错误。需要说明的是:NullValueMappingStrategy仅适用于映射方法的参数。不谈豆属性。在豆类映射方法中不可能将原始参数定义为源。

但是可以将非bean定义为bean映射方法的源。类似于下面的mapFrom方法:

package org.mapstruct.ap.test.bugs._xyz;

import java.util.List;

import org.mapstruct.Mapper;
import org.mapstruct.NullValueMappingStrategy;
import org.mapstruct.factory.Mappers;

@Mapper( nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
public interface XyzMapper {

    XyzMapper INSTANCE = Mappers.getMapper(XyzMapper.class);

    Target map(Source source);

    Target mapFrom( Integer myInt, List<Integer> myList);

    class Source {

        private int myInt;
        private List<Integer> myList;

        public int getMyInt() {
            return myInt;
        }

        public void setMyInt(int myInt) {
            this.myInt = myInt;
        }

        public List<Integer> getMyList() {
            return myList;
        }

        public void setMyList(List<Integer> myList) {
            this.myList = myList;
        }
    }

    class Target {

        private int myInt;
        private List<Integer> myList;

        public int getMyInt() {
            return myInt;
        }

        public void setMyInt(int myInt) {
            this.myInt = myInt;
        }

        public List<Integer> getMyList() {
            return myList;
        }

        public void setMyList(List<Integer> myList) {
            this.myList = myList;
        }
    }


}

使用NullValueMappingStrategy.RETURN_DEFAULT时,mapFrom将返回空的Target,如文档中所指定。

应从与NullValueMappingStrategy相关的文档中删除此行:Primitives: the default values for primitives will be returned, e.g. false for boolean or 0 for int.