【问题标题】:ModelMapper configuration模型映射器配置
【发布时间】:2015-12-18 15:34:49
【问题描述】:

在尝试将布尔值映射到字符时,我看到了我无法用 ModelMapper 解释的行为。

(我查过了,问题与Lombok无关)。

@Data @NoArgsConstructor @AllArgsConstructor
public class Entity { private boolean instance; }
@Data @NoArgsConstructor @AllArgsConstructor
public class Item { private char instance; }

public final class ModelMapperTest
{
    private final ModelMapper modelMapper = new ModelMapper();

    @Before
    public void before()
    {
        modelMapper.addMappings(new PropertyMap<Entity, Item>()
        {
            protected void configure()
            {
                map().setInstance(source.isInstance() ? 'Y' : 'N');
            }
        });
    }

    @Test
    public void map()
    {
        for (final Item item : map(new ArrayList<Entity>()
        {
            {
                this.add(new Entity(true));
                this.add(new Entity(false));
            }
        }))
        {
            System.out.println(item);
        }
    }

    public List<Item> map(final List<Entity> entities)
    {
        return modelMapper.map(entities, new TypeToken<List<Item>>(){}.getType());
    }
}

这会产生字符 't' 和 'f' 而不是我想要的 'Y' 和 'N'。

项目(实例=t)

项目(实例=f)

有人知道ModelMapper 配置的外观吗?

【问题讨论】:

    标签: java modelmapper


    【解决方案1】:

    我认为您需要创建一个转换器来将布尔值映射到这样的字符:

    Converter<boolean, char> toChar = new AbstractConverter<boolean, char>() {
      protected char convert(boolean source) {
        return source ? 'Y' : 'N;
      }
    }; 
    

    那么你的 ProperyMap 应该使用这个转换器来映射它,如下所示:

        @Before
        public void before()
        {
            modelMapper.addMappings(new PropertyMap<Entity, Item>()
            {
                protected void configure()
                {
                    using(toChar).map().setIsInstance(source.isInstance());
                }
            });
        }
    

    看这里:

    【讨论】:

    • 好的,谢谢@Pau,我很确定这会起作用(以前写过转换器),但相当惊讶的是 ModelMapper 并没有更好地处理这个开箱即用的问题。反正加油。安德鲁
    • ;) 我同意。我不太确定它是否是最好的解决方案,但有时我也对某种映射感到惊讶..(也许我需要更好地理解这个库)无论如何,它是一个很棒的库。
    猜你喜欢
    • 1970-01-01
    • 2019-08-10
    • 2022-08-03
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多