Ошибка при создании bean-компонента с именем 'requestMappingHandlerMapping' с функцией kotlin suspend в spring-boot - PullRequest
0 голосов
/ 23 апреля 2020

версия с пружинной загрузкой: 2.2.6.RELEASE

kotlin версия: 1.3.71

kotlin версия сопрограммы: 1.3.5

I ' Я пытаюсь использовать приостановленную функцию в контроллере при загрузке. Здесь - это официальное do c, которое показывает пример.

@RestController
@RequestMapping("/account/v1")
class UserAccountResourceV1 {
    @GetMapping("/username-taken", produces = [MediaType.TEXT_PLAIN_VALUE])
    suspend fun userNameTaken(): String {
        return "yes"
    }
}

Я добавил необходимые зависимости в build.gradle.kts:

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-jersey")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
    }
    implementation(group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version = "1.3.2")
}

Он прерывается во время выполнения, выдавая эту ошибку:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Unsupported suspending handler method detected: public java.lang.Object com.example.user.service.resources.UserAccountResourceV1.userNameTaken(kotlin.coroutines.Continuation)

полный stderr равен здесь .

Нужна помощь в выяснении, что не так с моей реализацией.

1 Ответ

0 голосов
/ 23 апреля 2020

Разобрался с решением.

implementation("org.springframework.boot:spring-boot-starter-web")

необходимо заменить на

implementation("org.springframework.boot:spring-boot-starter-webflux")

В основном spring-boot-starter-webflux обеспечивает поддержку приостановленных функций.

...