当使用WebFlux时,如何通过HTTP DELETE方法发送请求体?

19

我想访问一个提供DELETE终端的HTTP API。这个特定的终端需要一个作为JSON正文的项目列表(我想要删除)。

现在我的问题是,我正在使用Spring Webflux。但它的WebClient不能让我发送带有DELETE请求体的内容。对于POST,我会这样做:

webClient.post()
         .uri("/foo/bar")
         .body(...)
         .exchange()

但对于DELETE方法,我得到的是一个RequestHeadersSpec,它不允许我提供body(...)选项:

webClient.delete()
         .uri("/foo/bar")
         .body(...)       <--- METHOD DOES NOT EXIST
         .exchange()

那么,使用Spring Webflux在客户端实现这个的方法是什么?


3
根据RFC 7231,DELETE请求消息中的有效负载没有定义的语义;在DELETE请求中发送有效载荷主体可能会导致某些现有实现拒绝该请求。因此,您正在处理一些非标准符合的扩展,这些扩展可能不会被默认支持。 - Roman Vottner
2个回答

33
您可以使用 webClient 的 method() 操作符。简单示例,
return webClient
        .method(HttpMethod.DELETE)
        .uri("/delete")
        .body(BodyInserters.fromProducer(Mono.just(new JSONObject().put("body","stringBody").toString()), String.class))
        .exchange() 

4
  return webClient
            .method(HttpMethod.DELETE)
            .uri(url)
            .body(Mono.just(request), requestClass)
            .retrieve() 
            .toEntity(Void.class);

结果,我们将得到:
 Mono<ResponseEntity<Void>>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接