阿毛
It's me !
想你所想

Hutool 之 “Invalid HTTP method: PATCH”

当前 Hutool 5.8.1 可使用如下代码去发起 Patch 请求

import cn.hutool.http.*;

HttpRequest request = HttpUtil.createRequest(Method.PATCH, url);
request.body(pathBody);
HttpResponse response = request.execute();

但实际请求会偶现如下错误

Caused by: cn.hutool.http.HttpException: Invalid HTTP method: PATCH
	at cn.hutool.http.HttpConnection.setMethod(HttpConnection.java:131) ~[hutool-all-5.8.1.jar!/:na]
	at cn.hutool.http.HttpRequest.initConnection(HttpRequest.java:1158) ~[hutool-all-5.8.1.jar!/:na]
	at cn.hutool.http.HttpRequest.doExecute(HttpRequest.java:1121) ~[hutool-all-5.8.1.jar!/:na]
	at cn.hutool.http.HttpRequest.execute(HttpRequest.java:1012) ~[hutool-all-5.8.1.jar!/:na]
	at cn.hutool.http.HttpRequest.execute(HttpRequest.java:988) ~[hutool-all-5.8.1.jar!/:na]
Caused by: java.net.ProtocolException: Invalid HTTP method: PATCH
	at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:440) ~[na:1.8.0_111]
	at sun.net.www.protocol.http.HttpURLConnection.setRequestMethod(HttpURLConnection.java:552) ~[na:1.8.0_111]

原因分析

https://file.blog.humh.cn/wp-content/uploads/2025/01/20250123171823321-1024x761.png

如上图所示,Hutool 在设置请求类型为 Patch 时会调用 HttpURLConnection#setRequestMethod 方法(如下图所示),而该方法内部并不支持 Patch。若执行 Patch 请求,则会抛出上文提到的异常。但 Hutool 这里通过反射修改 HttpURLConnection.methods 静态变量值将“PATCH”加入其中,以此尝试解决该问题

https://file.blog.humh.cn/wp-content/uploads/2025/01/20250123171226962-1024x587.png

但这种方式偶现失败,原因未知 https://gitee.com/dromara/hutool/issues/I3Z3DH

解决

可通过 HttpClient 或其他工具完成 Patch 请求,如下我们在 SpringBoot 项目中使用 RestTemplate 替代 Hutool HttpUtil

import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>(pathBody, headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(url, HttpMethod.PATCH, entity, JSONObject.class);

本文参考

  • “HttpURLConnection Invalid HTTP method: PATCH”:https://stackoverflow.com/questions/25163131/httpurlconnection-invalid-http-method-patch
  • “Invalid HTTP method: PATCH”:https://gitee.com/dromara/hutool/issues/I3Z3DH
#
首页      code      Java      Hutool 之 “Invalid HTTP method: PATCH”

humh

文章作者

站长本人,一个憨批!

发表评论

textsms
account_circle
email

想你所想

Hutool 之 “Invalid HTTP method: PATCH”
当前 Hutool 5.8.1 可使用如下代码去发起 Patch 请求 import cn.hutool.http.*; HttpRequest request = HttpUtil.createRequest(Method.PATCH, url); request.body(pathBody); HttpRe…
扫描二维码继续阅读
2025-01-23