2

ModelMapperブール値を char にマップしようとしているときに、説明できない動作が見られます。

(確認しましたが、問題は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());
    }
}

これは、意図した「Y」と「N」ではなく、文字「t」と「f」を生成します。

アイテム(インスタンス=t)

アイテム(インスタンス=f)

ModelMapper構成がどのように見えるか知っている人はいますか?

4

1 に答える 1

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

ここを見てください:

于 2016-07-28T07:08:12.947 に答える