首页 > 解决方案 > 其他映射中使用的 Mapstructs 抽象装饰器导致模棱两可的异常

问题描述

我实现了一个装饰器来自定义一个实体的映射,比如说MappingDecoratorA,它是一个抽象类,实现了mapstructs的MapperA接口。

public abstract class MappingDecoratorA implements MapperA {
...}
@Mapper
@DecoratedWith(MappingDecoratorA .class)
public interface MapperA {

在另一个映射中,我使用 MapperA,比如说 MappingB,它使用 cdi

@Mapper(uses = { MapperA.class},
    componentModel = "cdi")
public interface MapperB{

Mapstructs 为 MapperA 生成两个实现,MapperAImpl 和 MapperAImpl_。在我的情况下,注入机制不知道要使用哪个实现。结果是一个模棱两可的异常,监听了这两个实现。

mapstruct 是否支持解决我的问题?

标签: javamapstruct

解决方案


使用非默认值时componentModel,您必须将其用于所有映射器。特别是如果您想重用它们。否则特定组件将不知道如何注入和创建映射器。

因此,解决您的问题的方法是

@Mapper(componentModel = "cdi")
@DecoratedWith(MappingDecoratorA .class)
public interface MapperA {
}

推荐阅读