【问题标题】:Spring WebFlux: POST route ServerRequest object contains no body or any useful informationSpring WebFlux:POST 路由 ServerRequest 对象不包含正文或任何有用信息
【发布时间】: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


    【解决方案1】:

    张贴以防在某些时候对其他人有用。

    问题更进一步,尽管没有任何迹象表明主体存在映射问题,甚至 IntelliJ 的调试器也没有。它似乎完全忽略了它,唯一的问题是 NPE。

    searchServer.performQuery() 中,我试图将尸体提取到杰克逊ObjectNode

    val bodyData: String = request?.bodyToMono(ObjectNode::class.java)?.toProcessor()?.peek()!!.toString()
    

    更改为像这样直接使用 String 并订阅 Mono,它起作用了。

    val bodyData = request?.bodyToMono(String::class.java)?.subscribe{ logger.info("Body", it) }
    

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2021-07-31
      • 2021-08-11
      • 2021-03-16
      • 1970-01-01
      相关资源
      最近更新 更多