当前位置: 首页 > 知识库问答 >
问题:

ModelMapper-转换器/抽象转换器与提供程序

李法
2023-03-14

我使用ModelMapper将一些对象转换为复杂的DTO,反之亦然。

尽管我试图理解留档,但我发现很难理解何时使用转换器、提供程序或抽象转换器。

现在,例如,如果我想将字符串属性转换为目标DTO中的小DTO,我将在抽象转换器中手动执行。

例如:

dest.setAddressDTO(new AddressDTO(source.getStreet(), source.getNumber()));

虽然这是正确的方法吗?我应该何时使用提供商?

如果我想用条件设置属性,我可以在转换器中使用条件吗?或者只有在使用PropertyMap时才能使用条件?

此外,使用同一个modelMapper实例转换几种不同类型的对象是否是一种好的做法?

提前感谢

共有1个答案

羊柏
2023-03-14

正确的工作方式是使用转换器。

例如,假设我想创建一个转换器,将dto转换为域对象。

首先定义一个转换器:

private Converter companyDtoToCompany = new AbstractConverter<CompanyDto, Company>() {
    @Override
    protected Company convert(CompanyDto source) {
        Company dest = new Company();

        dest.setName(source.getName());
        dest.setAddress(source.getAddress());
        dest.setContactName(source.getContactName());
        dest.setContactEmail(source.getContactEmail());
     (...)
        dest.setStatus(source.getStatus());

        return dest;
    }
};

然后将其添加到configureMappings()方法中的映射器中:

    modelMapper = new ModelMapper();

    // Using STRICT mode to prevent strange entities mappin

    modelMapper.getConfiguration()
                     .setMatchingStrategy(MatchingStrategies.STRICT);

    modelMapper.addConverter(companyDtoToCompany);
    // modelMapper.addConverter(otherConverter);
}

最后,您只需要为您可以从代码中使用的类型添加映射方法:

public Company convertCompanyReqDtoToCompany(CompanyDto dto, Class<Company> destinationType) {
        return modelMapper.map(dto, destinationType);
    }
 类似资料:
  • 我在Enver和MySql 5.6中使用HiberNate 4.3.4。 如果没有 JPA 2.1 转换器,下面的 实体在 上会失败,因为 Hibernate 不知道如何处理 Name 类: 例外情况是: 为了解决这个问题,我然后添加这个转换器: 现在,异常变为: 这现在在实体的Envers审计表中失败。请注意,是审核表的名称,由选择。 完整的堆栈跟踪是: 我如何解决这个问题?Envers甚至与A

  • 如果您需要在Aurelia应用程序中转换某些值,则可以使用converters而不是手动将值转换为所需的格式。 转换日期 当我们想要将默认日期值转换为某种特定格式时,我们可以使用momentJS库。 这是一个用于操作日期的小型库。 C:\Users\username\Desktop\aureliaApp>jspm install moment 让我们创建一个新文件converters.js 。

  • XStream转换器是XStream库的关键组件,它负责将对象转换为XML,反之亦然。 XStream为常见类型提供了大量转换器,例如基元,字符串,文件,集合,数组和日期。 使用转换器 让我们使用SingleValueConvertor,其目的是将对象转换为单个字符串。 我们将使用SingleValueConvertor将对象写为属性字符串。 创建转换器 class NameConverter i

  • 程序说明: 1. 依赖:Windows操作系统,.Net FrameWork 3.5, Office Word 2. Word另存为HTML有几种格式可以选:单个网页mht,网页htm以及筛选过的网页htm。我选择的是筛选过的html,所有公式全部转成gif或者jpg图片,稍微规范一点的htm不会含有微软中的一些恶心的格式信息。 运行界面如下: 1. 程序初始界面:   2. “Open”选择一个

  • 我在android studio中建立了一个转换器,当我每次按转换按钮时,距离部分(activity)就会崩溃。该应用程序说,特定的activity已经停止工作,该应用程序回到主要的activity。在android studio中没有显示任何错误,我想我的问题可能是在使用旋转器中的int pos,但我不确定。这是我最后要完成的元素。请帮帮忙。下面是Java,后面是XML。 和xml null

  • 我为jsf创建了一个自定义转换器。getAsObject()工作正常,但getAsString()返回异常。我不确定问题出在哪里,我尝试过用不同的方式将对象转换为字符串,但它不断返回异常。 这是我的代码: 这是Product类(为简单起见排除了getter/Setters/equals()/hash()): 这是stack我得到的: 这是我使用转换器的jsf: