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

使用HttpURLConnection调用Google日历API返回空列表求助

搞定Google Calendar API空列表问题!

嘿,我一眼就瞅到问题出在哪了——你在Java代码里用的URL里,参数分隔符用了&(这是HTML里的转义字符),但Postman会自动帮你转成正常的&,可Java的HttpURLConnection不会干这个活,所以请求参数解析错了!

为啥Postman能跑通?

Postman对URL的兼容性比较友好,它看到&会自动转换成URL标准的参数分隔符&,所以能正确识别q=test和maxResults=2500这两个参数,自然能返回正确结果。

为啥Java调用就返回空列表?

HttpURLConnection是严格按照你写的URL字符串来发请求的,它不会解析HTML实体。这就导致你的请求里,q的参数值变成了test&maxResults=2500,而maxResults参数根本没被正确识别。Google Calendar API拿着这个奇怪的关键词去搜,当然找不到匹配的事件,只能返回空列表咯。

怎么修复?

把URL里的&直接换成&就行,修改后的代码片段是这样的:

URL host = new URL("https://www.googleapis.com/calendar/v3/calendars/primary/events?q=test&maxResults=2500");
HttpURLConnection hosturl = (HttpURLConnection) host.openConnection();
// 后面的请求处理逻辑保持不变

额外提个醒

如果你的搜索关键词或者参数是动态生成的(比如来自用户输入),最好用URLEncoder来编码参数值,避免特殊字符(比如空格、&、=这些)搞乱URL解析。举个例子:

String searchKeyword = "test";
int maxResults = 2500;
// 编码关键词,确保特殊字符被正确处理
String encodedKeyword = URLEncoder.encode(searchKeyword, StandardCharsets.UTF_8);
// 拼接成正确的URL
String urlString = String.format("https://www.googleapis.com/calendar/v3/calendars/primary/events?q=%s&maxResults=%d", encodedKeyword, maxResults);
URL host = new URL(urlString);
HttpURLConnection hosturl = (HttpURLConnection) host.openConnection();

这样处理后,不管参数里有啥特殊字符,都能保证请求被正确解析啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:26:29