【发布时间】:2020-10-20 16:01:57
【问题描述】:
我正在 Kotlin 中编写 Spring WebFlux 路由来处理带有 JSON 正文的 POST 请求。但是,发送我的cURL 请求后,我可以看到ServerRequest 对象中基本上没有任何内容,当然不是我发送的JSON。
curl -v -X POST -H "Content-Type: application/json" -d '{"key1":"value1","key2":"value2"}' http://myserver:8989/query
SearchServerConfig.kt
@Configuration
open class SearchServerConfig {
@Bean
open fun searchServer(): ISearchServer {
return SearchServer()
}
@Bean
open fun route(searchServer: ISearchServer): RouterFunction<ServerResponse?> {
return RouterFunctions.route(
RequestPredicates.POST("/query").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)).and(RequestPredicates.contentType(MediaType.APPLICATION_JSON)),
HandlerFunction { request: ServerRequest? -> searchServer.performQuery(request)!!
})
}
}
SearchServer.kt
open class SearchServer() : ISearchServerService {
companion object {
val logger = LoggerFactory.getLogger(SearchServer::class.java)
}
override fun performQuery(request: ServerRequest?): Mono<ServerResponse?>? {
logger.debug("!!>> request=[$request]")
...
}
日志中的此日志输出仅包含:
!!>> request=[HTTP POST /query]
很明显,当我尝试提取 JSON 正文时
val bodyData: String = request?.bodyToMono(JSONObject::class.java)?.toProcessor()?.peek()!!.toString()
它抛出一个 NPE。为什么没有来自cURL 请求的正文,或任何标头,或其他任何东西?
【问题讨论】:
标签: spring spring-boot kotlin spring-webflux