You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RestTemplate转WebClient:PUT请求空Body的写法规范咨询

WebClient PUT请求:无请求体 vs .bodyValue(null)的合法性说明

两种写法都是合法的,但HTTP行为和WebClient的处理逻辑有细微区别,要不要显式声明空请求体取决于你需要匹配的原有行为:

1. 未指定请求体的写法

示例代码:

webClient.put()
         .uri("/api/your-resource")
         .headers(headers -> headers.addAll(yourRequestHeaders))
         .retrieve()
         .bodyToMono(Void.class);

这种情况下,WebClient发送的PUT请求不带任何请求体,也不会添加Content-Length这类和请求体相关的头部。HTTP请求结构大致如下:

PUT /api/your-resource HTTP/1.1
Host: your-server.com
[你的自定义请求头]

HTTP规范里并没有强制要求PUT请求必须携带请求体,只要你的服务器支持接收无请求体的PUT,这种写法完全可行。

2. 使用.bodyValue(null)的写法

示例代码:

webClient.put()
         .uri("/api/your-resource")
         .headers(headers -> headers.addAll(yourRequestHeaders))
         .bodyValue(null)
         .retrieve()
         .bodyToMono(Void.class);

这种写法会让WebClient显式发送一个空请求体,同时自动添加Content-Length: 0请求头,和你之前用RestTemplatenew HttpEntity<>(null, headers)的行为完全一致。对应的HTTP请求结构:

PUT /api/your-resource HTTP/1.1
Host: your-server.com
Content-Length: 0
[你的自定义请求头]

要不要显式声明空请求体?

  • 如果你需要和原有RestTemplate的行为100%对齐,确保服务器收到带Content-Length: 0的请求,就用.bodyValue(null);
  • 如果服务器兼容无请求体的PUT请求,两种写法都能正常工作,选哪种都可以。

内容的提问来源于stack exchange,提问作者joseluisbz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:07:06