说明:

本文由人机协作生成,作者提供主要思路,借助AI通过多轮迭代逐步优化生成。

核心思路

教学目标:让学生体验“在AI辅助下,从零创建Maven项目,引入一个第三方库,并跑通一个核心功能”的全流程

原始项目 90分钟极简版核心目标 技术栈极简版 功能要求极简版
1. 天气预报 调用API,解析JSON,打印结果。 仅保留 OkHttp + Jackson 1. 查询一个固定城市的天气。2. 解析JSON,控制台打印温度和天气描述。进阶:将结果保存为CSV
  1. 创建Maven项目 (15分钟)

    1. 目标:在IDEA中创建新项目,认识pom.xml

    2. AI提示词示例: > “我需要创建一个Java的Maven项目,请给我创建项目的步骤,以及在pom.xml中如何设置JDK版本为21。”

    3. 这里可以在创建Maven项目的时候下载对应版本的JDK。

    4. Maven:你的智能项目管家

      一、Maven依赖管理的优势

      想象一下你以前搭建Java项目的方式:需要手动去网上下载各种第三方库(jar包),然后小心翼翼地复制到项目的lib文件夹里,还要担心版本冲突、缺少依赖包等问题。Maven彻底改变了这种局面

      传统方式 Maven方式 我的收获
      手动搜索下载jar包 一行配置自动下载 省时省力,专注代码
      手动管理依赖关系 自动解决"依赖的依赖" 不再担心缺库少包
      版本混乱易冲突 统一版本管理 项目环境干净整洁
      每个项目独立jar包 本地仓库共享复用 磁盘空间高效利用
    5. 什么是HTTP请求?

      HTTP(超文本传输协议)是互联网上数据通信的基础协议。简单理解就是客户端(你的程序)和服务器(天气API)之间的"对话规则"

      概念 比喻 在我的项目中
      请求(Request) 你向服务员点餐 OkHttpClient发送"给我北京天气"的请求
      响应(Response) 服务员给你上菜 API返回包含天气数据的JSON字符串
      URL 餐厅地址和菜单编号 https://api.openweathermap.org/data/2.5/weather
      API Key 会员卡/凭证 b6907d289e10d714a6e88b30761fae22
    6. 核心代码展示:
      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");
          }
      }
  2. 在pom.xml中添加依赖 (20分钟)

    1. 目标:在pom.xml中添加极简版技术栈所需的1-2个依赖。

    2. 此处附加图片:

  3. 编写并理解核心代码 (40分钟)

    1. 目标:利用AI生成极简版功能代码,老师带领学生阅读并理解关键行。

    2. AI提示词示例 (以天气预报为例): > “用Java写一个WeatherService类,使用OkHttp调用api.openweathermap.org的免费天气接口(请提供一个示例API Key),使用Jackson解析返回的JSON,并打印出城市名、温度和天气描述。注意做好异常处理。”

    3. 实际根据提示词由AI提供的代码:

  4. 运行与调试 (15分钟)

    1. 目标:解决常见问题(如依赖下载失败、API Key配置、网络超时),让程序跑通。
    2. 运行结果截图:(注:

      "Read timed out"只是网络连接问题,不是代码错误!这说明:程序成功调用了OkHttp库程序尝试连接了天气API只是网络超时(可能因为API Key限制或网络问题))

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐