Как сделать запрос почтальона на kotlin сопрограмм - PullRequest
1 голос
/ 17 апреля 2020

У меня есть следующая функция сопрограммы, и я хочу, чтобы почтальон запросил конечную точку. Приложение запущено http://localhost: 8080

    @Configuration
class MerchantApi {

    @Bean
    fun routes(paymentHandler: paymentHandler) = coRouter {
        "/payment-link".nest {
            POST("/init") { serverRequest ->
                //logic here
            }
        }
    }
}

Я пробовал, как показано ниже, но выдает ошибку 404. enter image description here

Я использую gradle, и это файл build.gradle

    buildscript {
    repositories {
        mavenCentral()

        maven {
            url 'https://plugins.gradle.org/m2/'
        }
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
        classpath "org.glassfish.jaxb:jaxb-runtime:$glassfish_jaxb_version"
    }
}

plugins {
    id 'org.springframework.boot'
    id 'io.spring.dependency-management'
    id 'org.jetbrains.kotlin.jvm'
    id 'org.jetbrains.kotlin.plugin.spring'
    id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.61'
}

group = "payapp"

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-thymeleaf')
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-mail")
    implementation("org.springframework.boot:spring-boot-starter-security")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation "com.github.kittinunf.fuel:fuel:$fuel_version"
    implementation "com.beust:klaxon:$klaxon_version"
    implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
    implementation("org.springframework.security.oauth:spring-security-oauth2:2.3.4.RELEASE")
}

Есть ли способ сделать это?

1 Ответ

1 голос
/ 17 апреля 2020

Проблема, с которой вы сталкиваетесь, связана с включением в ваши зависимости модулей spring-boot-starter-web и spring-boot-starter-webflux. Ниже из документации Spring :

Добавление модулей spring-boot-starter-web и spring-boot-starter-webflux в ваше приложение приводит к автоматической настройке Spring Boot Spring MVC , а не WebFlux . Это поведение было выбрано потому, что многие разработчики Spring добавляют spring-boot-starter-webflux в свое приложение Spring MVC, чтобы использовать реактивный WebClient. Вы по-прежнему можете применить свой выбор, установив для выбранного типа приложения значение SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE).

Поскольку вам нужен маршрут, сгенерированный через модуль webflux, вам придется либо удалить зависимость spring-boot-starter-web из своего build.gradle файл, либо настройте webApplicationType вашего приложения как REACTIVE, как показано ниже:

fun main(args: Array<String>) {
    runApplication<ClassName>(*args) {
        webApplicationType = WebApplicationType.REACTIVE
    }
}
...