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

ModelMapper-已存在映射-两种配置

东方文林
2023-03-14

我有两个类使用ModelMapper将实体转换为DTO。在每个类中,我都在类的构造函数中配置了ModelMapper,以避免将所有关系转换为DTO并获得StackOverflow Error。

公司服务impl

private ModelMapper modelMapper;

@Autowired
public CompanyServiceImpl(ModelMapper modelMapper) {
    this.modelMapper = modelMapper;

    modelMapper.addMappings(skipCompanyServiceFieldsMap);
    modelMapper.addMappings(skipCompanyServiceModuleFieldsMap);
}

PropertyMap<CompanyServiceModule, CompanyServiceModuleDTO> skipCompanyServiceModuleFieldsMap = new PropertyMap<CompanyServiceModule, CompanyServiceModuleDTO>() {
    @Override
    protected void configure() {
        // Tells ModelMapper to NOT populate back references
        skip(destination.getCompanyService());
        skip(destination.getServiceModule().getCompanyServiceModules());
        skip(destination.getServiceModule().getService());
        skip(destination.getServiceModule().getServiceModuleLanguages());
        skip(destination.getServiceModule().getServiceModuleMenus());
    }
};

公司利润

private ModelMapper modelMapper;

@Autowired
public CompanyProfileImpl(ModelMapper modelMapper) {
    this.modelMapper = modelMapper;

    modelMapper.addMappings(skipCompanyProfileFieldsMap);
    modelMapper.addMappings(skipCompanyProfileModuleFieldsMap);
    modelMapper.addMappings(skipCompanyProfileServiceModuleFieldsMap);
}

PropertyMap<CompanyServiceModule, CompanyServiceModuleDTO> skipCompanyProfileServiceModuleFieldsMap = new PropertyMap<CompanyServiceModule, CompanyServiceModuleDTO>() {
    @Override
    protected void configure() {
        // Tells ModelMapper to NOT populate back references
        skip(destination.getCompanyProfileModules());
        skip(destination.getServiceModule());
        skip(destination.getCompanyService());
    }
};

当我运行应用程序时,我得到一个错误:

com的映射已存在。特写国际。批准dtos。公司服务模块化。setCompanyService()。

如何为ModelMapper提供两个配置,每个配置都特定于所实现的服务?因为在一种情况下,带来一些关系是有意义的,而在另一种情况下,没有。

共有1个答案

逑俊楚
2023-03-14

我将类的实例化更改为构造函数,而不是让Spring实例化并作为单例处理。

private ModelMapper modelMapper;

public CompanyProfileImpl() {
    // Necessary to not get in conflict with others
    this.modelMapper = new ModelMapper();

    modelMapper.addMappings(skipCompanyProfileFieldsMap);
    modelMapper.addMappings(skipCompanyProfileModuleFieldsMap);
    modelMapper.addMappings(skipCompanyServiceModuleFieldsMap);
}

 类似资料:
  • 我通过DTO从表单中获取数据,并将其映射到Hibernate实体。我想跳过一个日期字段,因为传入的数据都是字符串,我需要将字符串字段转换为与其他字段分开的日期。其余字段将直接从传入DTO映射。对于第一个请求,该过程可以正常工作,但对于后续请求,会引发以下异常: 这个错误已经被提出,但似乎没有人对此作出回应。 https://github.com/jhalterman/modelmapper/iss

  • 我与ModelMapper框架有麻烦。请解释为什么我看到以下行为。 我在build.gradle有以下依赖性 和一个类客户: 我还有一个地图绘制工具: 还有一个测试 在fred()中,方法输出是非红色的“Customer{name=fred,age=40}”(“Customer{name=null,age=40}”)。你能解释一下为什么吗?为什么我在第一个方法中看不到输出“George”?

  • 我有一个父类和子类,其各自的DTO如下 当我试图将父映射到父映射到父映射到父映射时,我得到了堆栈溢出错误。 请帮我解决这个问题。

  • 我使用DTO和modelMapper是为了不让某些字段可见。我有一个类别实体,可以有子类别 创建类别时,我使用模型: 在此模型中,我希望parentCategoryKeyId与父对象的categoryKeyId匹配。 例如,如果我创建了一个“顶级”类别: 它返回给我: 当我这样做时: 在我的控制器中,我将其余对象传递给DTO层,该层调用服务: 我的类别是基本的POJO: 为我服务: 我的问题是,我

  • 这是我的DTO: 这是我的实体: 我想配置我的ModelMapper将Tag#id映射到TagVolumeDTO#idTag。这可能吗?

  • 问题内容: 我正在使用ModelMapper Framework(http://modelmapper.org/)映射Java中的对象。在映射包含抽象类的具体类(DTO到实体)时遇到了一个问题。 示例:任务具有AbstractItems列表。 AbstractItems是问题和条件。 映射方法: ModelMapper尝试创建一个AbstractItem的新实例,该实例将引发异常。有没有办法在运行