在尝试将布尔值映射到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
配置应该如何显示?
答案 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());
}
});
}
看看这里: