Maven 项目实战入门之--天气预报
本文介绍了一个90分钟极简版Java编程教学案例,目标是让学生体验在AI辅助下创建Maven项目并实现天气预报功能的完整流程。案例采用Maven管理项目依赖,使用OkHttp进行HTTP请求和Jackson解析JSON数据。教学分为四个阶段:创建Maven项目(15分钟)、添加依赖(20分钟)、编写核心代码(40分钟)和运行调试(15分钟)。通过调用开放天气API,学生将学习如何发送HTTP请求、
说明:
本文由人机协作生成,作者提供主要思路,借助AI通过多轮迭代逐步优化生成。
核心思路:
教学目标:让学生体验“在AI辅助下,从零创建Maven项目,引入一个第三方库,并跑通一个核心功能”的全流程。
| 原始项目 | 90分钟极简版核心目标 | 技术栈极简版 | 功能要求极简版 |
|---|---|---|---|
| 1. 天气预报 | 调用API,解析JSON,打印结果。 | 仅保留 OkHttp + Jackson | 1. 查询一个固定城市的天气。2. 解析JSON,控制台打印温度和天气描述。进阶:将结果保存为CSV |
-
创建Maven项目 (15分钟)
-
目标:在IDEA中创建新项目,认识
pom.xml。 -
AI提示词示例: > “我需要创建一个Java的Maven项目,请给我创建项目的步骤,以及在pom.xml中如何设置JDK版本为21。”
-
这里可以在创建Maven项目的时候下载对应版本的JDK。
-
Maven:你的智能项目管家
一、Maven依赖管理的优势
想象一下你以前搭建Java项目的方式:需要手动去网上下载各种第三方库(jar包),然后小心翼翼地复制到项目的lib文件夹里,还要担心版本冲突、缺少依赖包等问题。Maven彻底改变了这种局面。
传统方式 Maven方式 我的收获 手动搜索下载jar包 一行配置自动下载 省时省力,专注代码 手动管理依赖关系 自动解决"依赖的依赖" 不再担心缺库少包 版本混乱易冲突 统一版本管理 项目环境干净整洁 每个项目独立jar包 本地仓库共享复用 磁盘空间高效利用 -
什么是HTTP请求?
HTTP(超文本传输协议)是互联网上数据通信的基础协议。简单理解就是客户端(你的程序)和服务器(天气API)之间的"对话规则"。
概念 比喻 在我的项目中 请求(Request) 你向服务员点餐 OkHttpClient发送"给我北京天气"的请求响应(Response) 服务员给你上菜 API返回包含天气数据的JSON字符串 URL 餐厅地址和菜单编号 https://api.openweathermap.org/data/2.5/weatherAPI Key 会员卡/凭证 b6907d289e10d714a6e88b30761fae22 - 核心代码展示:
package org.example; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import java.io.IOException; public class WeatherService { // 重要:需要注册获取API Key // 访问:https://openweathermap.org/api // 临时测试Key(有次数限制):b6907d289e10d714a6e88b30761fae22 private static final String API_KEY = "b6907d289e10d714a6e88b30761fae22"; private static final String BASE_URL = "https://api.openweathermap.org/data/2.5/weather"; // 创建两个工具对象 private final OkHttpClient client; // 发送HTTP请求 private final ObjectMapper objectMapper; // 解析JSON // 构造函数:初始化工具对象 public WeatherService() { this.client = new OkHttpClient(); this.objectMapper = new ObjectMapper(); } /** * 获取指定城市的天气信息 */ public void getWeather(String city) { // 构建请求URL String url = String.format("%s?q=%s&appid=%s&units=metric&lang=zh_cn", BASE_URL, city, API_KEY); // 创建HTTP请求 Request request = new Request.Builder() .url(url) .build(); try (Response response = client.newCall(request).execute()) { // 检查响应是否成功 if (response.isSuccessful() && response.body() != null) { String responseBody = response.body().string(); parseAndPrintWeather(responseBody); // 解析并打印天气 } else { System.out.println("请求失败,状态码: " + response.code()); System.out.println("提示:这个测试Key可能已达到调用限制"); System.out.println("请访问 openweathermap.org 注册获取自己的API Key"); } } catch (IOException e) { System.out.println("网络请求出错: " + e.getMessage()); } } /** * 解析JSON并打印天气信息 */ private void parseAndPrintWeather(String json) { try { // 将JSON字符串转换为对象树 JsonNode root = objectMapper.readTree(json); // 提取需要的数据 String cityName = root.path("name").asText(); double temperature = root.path("main").path("temp").asDouble(); String description = root.path("weather").get(0).path("description").asText(); // 打印结果 System.out.println("========== 天气报告 =========="); System.out.println("🌍 城市: " + cityName); System.out.println("🌡️ 温度: " + temperature + "°C"); System.out.println("☁️ 天气: " + description); System.out.println("============================"); } catch (Exception e) { System.out.println("解析JSON数据出错: " + e.getMessage()); // 打印部分JSON帮助调试 if (json != null && json.length() > 0) { int length = Math.min(100, json.length()); System.out.println("收到数据的前" + length + "字符: " + json.substring(0, length)); } } } /** * 主方法 - 程序从这里开始执行 */ public static void main(String[] args) { System.out.println("🚀 天气预报程序启动中..."); // 创建天气服务对象 WeatherService weatherService = new WeatherService(); // 查询天气(如果失败会自动提示) System.out.println("\n正在获取北京天气..."); weatherService.getWeather("Beijing"); System.out.println("\n✅ 演示完成!"); System.out.println("如需完整功能,请注册获取自己的API Key"); } }
-
-
在pom.xml中添加依赖 (20分钟)
-
目标:在
pom.xml中添加极简版技术栈所需的1-2个依赖。 -
此处附加图片:

-
-
编写并理解核心代码 (40分钟)
-
目标:利用AI生成极简版功能代码,老师带领学生阅读并理解关键行。
-
AI提示词示例 (以天气预报为例): > “用Java写一个WeatherService类,使用OkHttp调用
api.openweathermap.org的免费天气接口(请提供一个示例API Key),使用Jackson解析返回的JSON,并打印出城市名、温度和天气描述。注意做好异常处理。” -
实际根据提示词由AI提供的代码:


-
-
运行与调试 (15分钟)
- 目标:解决常见问题(如依赖下载失败、API Key配置、网络超时),让程序跑通。
- 运行结果截图:(注:
"Read timed out"只是网络连接问题,不是代码错误!这说明:程序成功调用了OkHttp库程序尝试连接了天气API只是网络超时(可能因为API Key限制或网络问题))

更多推荐

所有评论(0)