web-dev-qa-db-ja.com

Spring WebFluxが「プロデューサー」タイプをスローするのは、応答本文で値を返すと不明になる

私はKotlinでSpring Bootを使用しており、リアクティブサービスのハンドラーを渡すことで、GETレストフルサービスからステータス値を取得しようとしています。

渡したハンドラーがリクエスト内にあることがわかりますが、ボディを構築しているときはいつでも、次の例外が発生します。

Java.lang.IllegalArgumentException: 'producer' type is unknown to ReactiveAdapterRegistry
    at org.springframework.util.Assert.notNull(Assert.Java:198) ~[spring-core-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException

これが私のコードです

@Bean
    fun getReceiptConversionStatus() = router {
        accept(MediaType.APPLICATION_JSON).nest {
            GET("/BsGetStatus/{handler}", ::handleGetStatusRequest)
        }
    }
    private fun handleGetStatusRequest(serverRequest: ServerRequest): Mono<ServerResponse> = ServerResponse
            .ok()
            .contentType(MediaType.APPLICATION_JSON)
            .body(GetStatusViewmodel(fromObject(serverRequest.pathVariable("handler"))), GetStatusViewmodel::class.Java)
            .switchIfEmpty(ServerResponse.notFound().build())

そしてそれが私のViewmodelです:

data class GetStatusViewmodel(
        @JsonProperty("handler") val documentHandler: String
)
2
hasan.alkhatib

私は実際にそれを解決し、誰かが私がしたのと同じ間違いをした場合に備えて、ここに投稿します:(これは、Javaで作業する人にとっては典型的な間違いでした間違ったインポートでした

アプリケーションでfromObject()メソッドを使用していました「実際のコードと一致するように質問を更新しました」。これらのインポートの両方でこの関数を見つけることができ、私はオーバーロードされたbody()関数の1つを使用して、この間違って配置された関数を渡していました。

_//this is the wrong import I was using
import org.springframework.web.reactive.function.server.EntityResponse.fromObject
//this is the correct one for building the mono body
import org.springframework.web.reactive.function.BodyInserters.fromObject
_

BodyInsertersのメソッドを使用すると、fromObject(T)をbodyメソッドに渡すことができ、モノの結果が返されます。

0
hasan.alkhatib