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

问题描述

是否有一种方法可以自动连接在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);
}

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

解决方法

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

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

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