java - 如何一起使用 mapstruct 和 springboot bean? @autowired

标签 java spring-boot javabeans autowired mapstruct

@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/

相关文章:

java - 如何读取每行都有一个数字的文件java

Java Bean 数组列表

java - 如何在不知道属性类型的情况下设置属性(即通过 BeanUtils)

java - 如何管理对象列表?

spring - 如何在 Spring Boot 中设置惰性初始化的默认行为?

spring-security - 集成 Spring Security OAuth2 和 Spring Social

java - JSF <c :if <c:choose problem

java - 为什么我的 Intent 没有正确传递?

java - 使用扩展类代替基类

java - 如何获取过滤后的extendedDataTable的选中行?