Spring WebFlux:POST路由ServerRequest对象不包含任何正文或任何有用的信息

同时在地狱:

我正在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请求的正文,任何标头或真正的内容?

同时在地狱:

发布,以防在某些时候对其他人有用。

问题没有解决,即使没有任何迹象表明我对主体(甚至是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) }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

serverRequest 中的正文为空,带有 ServerRequest(Spring Webflux)

istio 或 spring webflux 处理标头“Content-Encoding: deflate”中是否有任何内置过滤器来解压缩请求正文

Spring @Async与Spring WebFlux

Spring JsonPath包含任何顺序的异常

Spring react ReactorNettyWebSocketClient不记录任何内容

Spring缓存不缓存任何内容

Spring Security工作时,Spring LdapRepository不返回任何结果

是否有生成Spring Webflux优化的OCI映像的任何buildpack?

把一根棒子掰成小块;递归步骤不返回任何有用的信息

获取NoSuchBeanDefinitionException:Spring WebFlux中没有类型为ServerRequest的合格bean

如何构建不包含任何正文的POST请求

是否有任何Java / spring方式使用HttpServletRequest为当前登录的用户存储会话信息?

Spring Boot + Spring Data JPA + Spring Data ElasticSearch:elastic 不返回任何结果

Spring Cloud Gateway未路由(任何请求为404)

Spring Boot执行器未显示任何信息

通过对 spring 的任何请求获取用户详细信息

没有使用Spring Webflux路由器功能

Spring webflux 与 Mono 对象交互

WebExceptionHandler:如何用Spring Webflux编写正文

获得Spring认证有多有用

Spring Boot 分页 - PagingAndSortingRepository 不返回任何结果

Spring JPA示例查询不返回任何结果

Spring Boot:异步请求不返回任何东西

Spring Data Pagination使用JSONView不返回任何结果

Spring AOP - Aspect 不拦截任何东西

spring Cglib是有用的,但是类@Transactional不要代理

使用Spring从Mongo检索任何对象的最佳方法是什么?

Spring MockMvc不包含Cookie

Spring 注释控制器工作,但路由器/处理程序方法似乎没有从 *ServerRequest* 检索 *Mono<>*