2

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

(我已经检查过了,问题与龙目岛无关)。

@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配置应该如何看?

4

1 回答 1

0

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

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

看看这里:

于 2016-07-28T07:08:12.947 回答