私は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
)
私は実際にそれを解決し、誰かが私がしたのと同じ間違いをした場合に備えて、ここに投稿します:(これは、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メソッドに渡すことができ、モノの結果が返されます。