我的gradle文件中有以下部分:
apply plugin: 'kotlin-kapt'
...
compile("org.mapstruct:mapstruct:1.3.0.Final")
kapt("org.mapstruct:mapstruct-processor:1.3.0.Final")
字符串
我也在使用JUnit 5。
我的mapper看起来像:
@Mapper(componentModel = "spring")
interface ModelMapper {
fun convertToDto(forms: Model): DTO
@InheritInverseConfiguration
fun convertToModel(dto: DTO): Model
}
型
我试着把它自动连接成这样:
@Service
@Transactional
class MyService @Autowired constructor(
private val repository: MyRepository,
private val mapper: ModelMapper
) {
...
}
型
但是当我尝试运行测试/构建时,我得到一个错误:
...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type '....ModelMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
型
有谁知道为什么Sping Boot 不支持这种设置吗?
5条答案
按热度按时间z9zf31ra1#
尝试将Spring的annotation processor传递给
build.gradle
中的kapt:字符串
或者尝试保留javac注解处理器:
型
oprakyz72#
这帮助了我,在你的构建中添加这个。gradle.kts:
字符串
k4emjkb13#
这就是solution。
只是pom.xml必须包含一些更多的信息:
字符串
然后就成功了
hlswsv354#
如果你有一个
@Transactional class{}
,那么你必须让它的所有方法打开open fun(){}
来启用bean Autowiring
,kotlin spring boot plugin
改变了Kotlin的默认行为,它默认打开所有类和方法只需在项目的build.gradle中添加Kotlinspring Boot 插件
groovy:
字符串
Kotlin
型
7kqas0il5#
尝试添加
kapt(“org.mapstruct:mapstruct-jdk8:1.3.1.Final”)
我在springboot中使用mapstruct,使用Kotlin和gradle。和一切工作正常与autowiring,这就是我所拥有的:
字符串
和接口的配置:
@Mapper(componentModel =“spring”,injectionStrategy = InjectionStrategy.CONSTRUCTOR)