【问题标题】:Is there a way to find out if ServerRequest has a body?有没有办法找出 ServerRequest 是否有正文?
【发布时间】:2019-11-25 10:42:57
【问题描述】:

我想检查ServerRequest 是否包含正文。

有没有办法事先调用bodyToMono 方法找出来?

【问题讨论】:

  • 通过查看返回的状态码。根据 http 标准,如果 200 你有义务查看正文,如果 204 则没有内容。
  • 我说的是请求,而不是响应

标签: spring-webflux reactor


【解决方案1】:

假设客户端确实发送了相应的标头,您可以通过检查 content-length 标头来实现,如下所示:

request.headers().contentLength().orElseGet(0) > 0

您可以直接在处理程序中使用它,也可以在过滤器中使用它

【讨论】:

    【解决方案2】:

    您可以在服务器请求实例中使用.body(BodyExtracter) 方法

    如果正文包含数据,要转换为具有true 值的Mono<Boolean>,请使用

    Mono<Boolean> bodyContains = request.body((serverHttpRequest, context) -> serverHttpRequest
        .getBody()
        .collectList()
        .map(List::isEmpty));
    

    【讨论】:

    • 我最终会得到一个已经被读取的主体,这将使它对进一步处理毫无用处......这就是为什么我想找到一种在阅读之前检查主体是否存在的方法.. ..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多