在Java中如何开发一个简单的天气查询系统_Java网络编程应用解析-java教程

最可行方案是调用OpenWeatherMap公开API:注册获appid后用Java 11+ HttpClient发请求,传城市ID与units参数,设Accept头防HTML错误页,用Jackson解析JSON并校验字段存在性,加内存缓存与异常兜底。

直接调用公开天气 API 是最可行的路径,自己爬取网页或解析 HTML 容易失效、被封、违反 robots.txt。

选哪个 API:OpenWeatherMap 最适合初学者

OpenWeatherMap 提供免费版(1000 次/天),响应快、文档清晰、支持 JSON,不需要 OAuth 复杂流程。注册后拿到 appid 就能发 HTTP 请求。国内用户要注意它不支持中文城市名直查(如“北京”会返回空),得用英文名("beijing")或城市 ID(推荐)。

  • 城市 ID 可在官网搜索后从 URL 或响应中提取,比如北京是 101010100(中国气象局编码)或 OpenWeather 自己的 1816670
  • 接口地址示例:https://api.openweathermap.org/data/2.5/weather?id=1816670&appid=YOUR_KEY&units=metric
  • units=metric 返回摄氏度;用 imperial 会得华氏度,别漏写

用 HttpURLConnection 还是 HttpClient?推荐 HttpClient(Java 11+ 内置)

Java 11+ 自带 HttpClient,比老式 HttpURLConnection 更简洁、异步友好、自动处理 gzip。别再手写连接、流关闭、字符集设置——这些是初学者最常见的崩溃点。

  • 必须显式设 Accept: application/json,否则某些 API 返回 HTML 错误页,JsonParseException 就来了
  • 记得捕获 IOException 和 InterruptedException,网络请求可能超时或中断
  • 示例关键片段:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.openweathermap.org/..."))
    .header("Accept", "application/json")
    .GET()
    .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));

解析 JSON 别手写正则或 substring

用 org.json(轻量)或 Jackson(更健壮)解析,避免字符串截取导致的 StringIndexOutOfBoundsException。OpenWeather 的 JSON 结构固定,但字段可能缺失(比如 rain 在无雨时根本不出现)。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 在Java中如何开发一个简单的天气查询系统_Java网络编程应用解析-java教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4001660+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4001661+
  • 本周更新: 0+
  • 最后更新: 2026-03-16