ModelMapper配置

时间:2015-12-18 15:34:50

标签: java modelmapper

在尝试将布尔值映射到char时,我无法用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());
    }
}

产生字符&#39; t&#39;和&#39; f&#39;不是&#39; Y&#39;和&#39; N&#39;正如我所预期的那样。

  

物品(例如= T)

     

物品(例如= F)

任何人都知道ModelMapper配置应该如何显示?

1 个答案:

答案 0 :(得分:0)

我认为您需要创建一个转换器,将布尔值映射到char,如下所示:

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());
            }
        });
    }

看看这里: