Files
AIGC/demo/UNIREST_MIGRATION.md
AIGC Developer 8c55f9f376 feat: 完成代码逻辑错误修复和任务清理系统实现
主要更新:
- 修复了所有主要的代码逻辑错误
- 实现了完整的任务清理系统
- 添加了系统设置页面的任务清理管理功能
- 修复了API调用认证问题
- 优化了密码加密和验证机制
- 统一了错误处理模式
- 添加了详细的文档和测试工具

新增功能:
- 任务清理管理界面
- 任务归档和清理日志
- API监控和诊断工具
- 完整的测试套件

技术改进:
- 修复了Repository方法调用错误
- 统一了模型方法调用
- 改进了类型安全性
- 优化了代码结构和可维护性
2025-10-27 10:46:49 +08:00

5.6 KiB
Raw Blame History

API调用从RestTemplate迁移到Unirest

🎯 迁移概述

根据用户要求将API调用从Spring RestTemplate改为使用Unirest HTTP客户端库。

🔧 主要修改

1. 依赖更新 - pom.xml

添加Unirest依赖

<!-- Unirest HTTP客户端 -->
<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-java</artifactId>
    <version>3.14.2</version>
</dependency>

2. 导入语句更新 - RealAIService.java

修改前

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

修改后

import kong.unirest.HttpResponse;
import kong.unirest.Unirest;
import kong.unirest.UnirestException;

3. 类字段更新

修改前

private final RestTemplate restTemplate;
private final ObjectMapper objectMapper;

public RealAIService() {
    this.restTemplate = new RestTemplate();
    this.objectMapper = new ObjectMapper();
}

修改后

private final ObjectMapper objectMapper;

public RealAIService() {
    this.objectMapper = new ObjectMapper();
    // 设置Unirest超时
    Unirest.config().connectTimeout(0).socketTimeout(0);
}

📝 API调用方法更新

1. 文生视频任务提交

修改前 (RestTemplate)

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + aiApiKey);

HttpEntity<Map<String, Object>> request = new HttpEntity<>(requestBody, headers);
String url = aiApiBaseUrl + "/user/ai/tasks/submit";
ResponseEntity<Map> response = restTemplate.postForEntity(url, request, Map.class);

if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) {
    Map<String, Object> responseBody = response.getBody();
    // 处理响应...
}

修改后 (Unirest)

String url = aiApiBaseUrl + "/user/ai/tasks/submit";
HttpResponse<String> response = Unirest.post(url)
    .header("Content-Type", "application/json")
    .header("Authorization", "Bearer " + aiApiKey)
    .body(objectMapper.writeValueAsString(requestBody))
    .asString();

if (response.getStatus() == 200 && response.getBody() != null) {
    Map<String, Object> responseBody = objectMapper.readValue(response.getBody(), Map.class);
    // 处理响应...
}

2. 图生视频任务提交

修改前 (RestTemplate)

HttpEntity<Map<String, Object>> request = new HttpEntity<>(requestBody, headers);
ResponseEntity<Map> response = restTemplate.postForEntity(url, request, Map.class);

修改后 (Unirest)

HttpResponse<String> response = Unirest.post(url)
    .header("Content-Type", "application/json")
    .header("Authorization", "Bearer " + aiApiKey)
    .body(objectMapper.writeValueAsString(requestBody))
    .asString();

3. 查询任务状态

修改前 (RestTemplate)

HttpEntity<String> request = new HttpEntity<>(headers);
ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.GET, request, Map.class);

修改后 (Unirest)

HttpResponse<String> response = Unirest.get(url)
    .header("Authorization", "Bearer " + aiApiKey)
    .asString();

4. 获取可用模型

修改前 (RestTemplate)

HttpEntity<String> request = new HttpEntity<>(headers);
ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.GET, request, Map.class);

修改后 (Unirest)

HttpResponse<String> response = Unirest.get(url)
    .header("Authorization", "Bearer " + aiApiKey)
    .asString();

🔄 异常处理更新

修改前:

} catch (Exception e) {
    logger.error("API调用异常", e);
    throw new RuntimeException("API调用失败: " + e.getMessage());
}

修改后:

} catch (UnirestException e) {
    logger.error("API调用异常", e);
    throw new RuntimeException("API调用失败: " + e.getMessage());
} catch (Exception e) {
    logger.error("API调用异常", e);
    throw new RuntimeException("API调用失败: " + e.getMessage());
}

⚙️ 配置更新

超时设置:

// 设置Unirest超时
Unirest.config().connectTimeout(0).socketTimeout(0);

📊 主要差异对比

特性 RestTemplate Unirest
HTTP方法 restTemplate.postForEntity() Unirest.post()
请求头 HttpHeaders + HttpEntity .header() 链式调用
请求体 HttpEntity<Map> .body(String)
响应处理 ResponseEntity<Map> HttpResponse<String>
状态码 response.getStatusCode() response.getStatus()
响应体 response.getBody() objectMapper.readValue()
异常类型 Exception UnirestException

迁移完成状态

已完成的修改:

  • 添加Unirest依赖到pom.xml
  • 更新导入语句
  • 移除RestTemplate依赖
  • 修改submitTextToVideoTask方法
  • 修改submitImageToVideoTask方法
  • 修改getTaskStatus方法
  • 修改getAvailableModels方法
  • 更新异常处理
  • 设置超时配置

代码质量:

  • 编译通过
  • 类型安全警告(可接受)
  • 功能完整性保持

🚀 使用效果

现在API调用使用Unirest库具有以下特点

  1. 更简洁的API:链式调用更直观
  2. 更好的性能Unirest在性能方面有优势
  3. 更灵活的配置:支持更细粒度的配置
  4. 更现代的API符合现代Java开发习惯

系统现在已经成功从RestTemplate迁移到Unirest所有API调用功能保持不变