使用 kotlin 在 Spring Boot 中映射结构接口错误

Posted

技术标签:

【中文标题】使用 kotlin 在 Spring Boot 中映射结构接口错误【英文标题】:map struct interface error in SpringBoot with kotlin 【发布时间】:2021-04-16 16:47:24 【问题描述】:

我将 java spring boot 代码转换为 kotlin,现在我在 map struct 接口和 bean config 类中有错误

这是我的 Mapper 界面

@Component
@Mapper
interface PersonMapper 

    fun toPerson(personDTO: PersonDTO?): Person?
    fun toPersonDTO(person: Person?): PersonDTO?
    fun toPersons(personDTOS: List<PersonDTO?>?): List<Person?>?
    fun toPersonDTOs(personList: List<Person?>?): List<PersonDTO?>?

    companion object 
        @JvmStatic
        val INSTANCE: PersonMapper = Mappers.getMapper(PersonMapper::class.java)
    

还有我的 Bean 配置

@Configuration
class BeanConfig 

    @Bean
    @Primary
    fun personMapper(): PersonMapper 
        return PersonMapper.INSTANCE
    


还有我的错误

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'personController' defined in file [D:\Zaban\Server\target\classes\ir\ktcoders\zaban\person\PersonController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'personService' defined in file [D:\Zaban\Server\target\classes\ir\ktcoders\zaban\person\PersonService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personMapper' defined in class path resource [ir/ktcoders/zaban/config/BeanConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [ir.ktcoders.zaban.person.PersonMapper]: Factory method 'personMapper' threw exception; nested exception is java.lang.ExceptionInInitializerError

【问题讨论】:

【参考方案1】:

首先,您应该从界面中删除@Component,因为它没有带来任何价值(但它也不是错误的罪魁祸首)。

很难说更多,但是ExceptionInInitializerError 看起来Mappers 类有问题,所以请提供它的代码。可能还没有初始化,找不到这个映射器?

【讨论】:

以上是关于使用 kotlin 在 Spring Boot 中映射结构接口错误的主要内容,如果未能解决你的问题,请参考以下文章

在 spring-boot 中使用 kotlin 挂起函数创建名称为“requestMappingHandlerMapping”的 bean 时出错

无法在 Eclipse 中使用 Kotlin 项目运行 Spring Boot

如何在 Spring Boot 和 Spring WebFlux 中使用“功能 bean 定义 Kotlin DSL”?

为啥@JacksonXmlProperty 使用 Kotlin 忽略 Spring Boot 中的参数?

使用 Gradle 在 Spring Boot 项目中从 Kotlin 测试中引用 Java 代码时未解决的引用

Spring Boot (kotlin) 循环依赖