将所有映射器注入列表中,并以多态方式调用convert方法

时间:2020-09-06 20:25:15

标签: mapstruct

是否有一种方法可以自动连接在Spring中用Mapstruct编写的所有映射器,就像我们以前使用Spring Converter接口并调用一个toEntity(或convert或任何其他名称)一样?在春季,这很容易,因为它们都实现了相同的功能接口,并且通过使其从另一个接口继承,我们可以在运行时确定正确的转换器,如下所示:

import org.springframework.core.convert.converter.Converter;

public interface CustomConverter<S extends ..., T extends ...> extends Covnerter<S,T>{

boolean supports(Class clazz);
}

然后注入它很容易:

@Autowire
private final List<CustomConverter> myConverters;

,然后通过调用支持程序,我们将确定正确的转换器类型,然后对其进行转换。 我有这样的想法:

@Mapper
public interface MyMapper extends CustomMapper<MyEntity, MyDto>{
MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);

MyEntity toEntity(MyDto dto);

default boolean supports(Class clazz) {
return MyDto.class.isAssignableFrom(clazz);
}

public interface CustomMapper<T extends ..., S extends ...> {

boolean supports(Class clazz);
T toEntity(S dto);
}

但这不起作用。 您有什么建议吗?我可能会一起误解了这一切……谢谢。

1 个答案:

答案 0 :(得分:0)

结帐:https://github.com/mapstruct/mapstruct-spring-extensions

作者根据this SO问题中的讨论制作并制作了适配器。

可以找到基于非弹簧的解决方案here。尽管您需要编写自己的注释处理器。