在将typedelmapper与类型映射一起使用时,如何解决不兼容的类型(不可转换)

时间:2019-05-25 08:13:56

标签: java modelmapper typemaps

我正在尝试将实体映射到我的DTO。就我所知,我正在尝试不同的方法。 我成功地使用了带有隐式映射的映射,也成功地使用了带有configure方法的PropertyMap时的显式映射。

现在,我正在尝试使用TypeMap显式映射。这是我无法上班的最后一个。

与Modelmapper入门一起,我以该线程中的答案为例,How to use Explicit Map with Java 8 and ModelMapper?

static ResponseB convertBEntityToDtoExplicitTypeMap(ModelB modelB){
    ModelMapper modelMapper = new ModelMapper();
    TypeMap<ModelB, ResponseB> typeMap = modelMapper.createTypeMap(ModelB.class, ResponseB.class);

    typeMap.addMappings(mapping -> {
        mapping.map(modelB.getId(), ResponseB::setId);
        mapping.map(modelB.getBankaccountName(), ResponseB::setB);
        mapping.map(modelB.isActive(), ResponseB::setActive);
    });

    return modelMapper.map(modelB, ResponseB.class);
}

上面的代码块是我的代码示例,不起作用。

  • 使用setId时出现错误:类型不兼容:V不能转换为Long。
  • setB出现错误:类型不兼容:V不能转换为String。
  • setActive出现错误:类型不兼容:V不能转换为布尔值。

如何使该示例与TypeMap一起使用?

1 个答案:

答案 0 :(得分:0)

通过不断尝试,我自己弄清楚了。

我必须使用类而不是mapping.map中的对象

static ResponseB convertBEntityToDtoExplicitTypeMap(ModelB modelB){
    ModelMapper modelMapper = new ModelMapper();
    TypeMap<ModelB, ResponseB> typeMap = modelMapper.createTypeMap(ModelB.class, ResponseB.class);

    typeMap.addMappings(mapping -> {
        mapping.map(ModelB::getId, ResponseB::setId);
        mapping.map(ModelB::getBankaccountName, ResponseB::setB);
        mapping.map(ModelB::isActive, ResponseB::setActive);
    });

    return modelMapper.map(modelB, ResponseB.class);
}