在模型映射器中映射可选项

时间:2019-07-17 08:18:51

标签: modelmapper

我一直在试验模型映射器,并且我有一个使用Optional的DTO,我想使用可为空的字段将其映射到实体。

在一个测试中,我制作了FooOptionalFooNullable,它们分别具有字段Optional<BarOptional>BarNullable。想法是映射setBar方法,以便模型映射器将可选参数转换为null,反之亦然。

我通过写作使它起作用

private static <S, D> Converter<Optional<S>, D> optionalToNullable(final TypeMap<S, D> barMapper) {
    return
      context ->
      barMapper.map(context.getSource().orElse(null));
  }

...
    TypeMap<BarNullable, BarOptional> barMap = mapper.createTypeMap(BarNullable.class, BarOptional.class);
    mapper.createTypeMap(FooNullable.class, FooOptional.class)
      .addMappings(
        expr ->
        expr
        .using(nullableToOptional(barMap))
        .map(FooNullable::getBar, FooOptional::setBar)
      );

类似的事情在相反的方向上起作用。这一切似乎都很笨拙,我想知道我是否缺少什么。

我们的DTO使用代码生成(正确或错误地)使用Optional对可为空的属性建模。我们通常不对数据库实体使用Optional,并且在任何情况下它似乎都不起作用。这一切可能是错误的,也可能不是错误的,但是我不能轻易改变它,这也不是问题的重点。

0 个答案:

没有答案