@Mapper(componentModel = "spring")
public interface DemoConvert {
public static DemoConvert INSTANCE = mappers.getMapper(DemoConvert.class);
@AutoWired
private PersonInfoSearchService personInfoSearchService;
@Mapping(source = "name", target = "name")
@Mapping(source = "id", target = "gender", expression = "java(personInfoSearchService.searchGenderById(id))")
PersonDTO toPerson(TeacherDTO teacherDTO);
}
如何同时使用mapstruct和springboot bean? @ Autowiring
最佳答案
您需要将接口(interface)更改为抽象类并将 PersonInfoSearchService
调用移动到 @Named
方法:
@Mapper(componentModel = "spring")
public abstract class DemoConvert {
@Autowired
private PersonInfoSearchService personInfoSearchService;
@Mapping(source = "name", target = "name")
@Mapping(source = "id", target = "gender", qualifiedByName = "mapGenderFromId")
public abstract PersonDTO toPerson(TeacherDTO teacherDTO);
@Named("mapGenderFromId")
String mapGenderFromId(Long id) { // return type of gender, I took String. For id took Long
return personInfoSearchService.searchGenderById(id);
}
}
此外,您不需要声明 INSTANCE
变量,因为您正在使用 componentModel = "spring"
。您可以简单地将您的映射器 Autowiring 到其他 spring bean 中。
关于java - 如何一起使用 mapstruct 和 springboot bean? @autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70982567/