主要更新: - 修复了所有主要的代码逻辑错误 - 实现了完整的任务清理系统 - 添加了系统设置页面的任务清理管理功能 - 修复了API调用认证问题 - 优化了密码加密和验证机制 - 统一了错误处理模式 - 添加了详细的文档和测试工具 新增功能: - 任务清理管理界面 - 任务归档和清理日志 - API监控和诊断工具 - 完整的测试套件 技术改进: - 修复了Repository方法调用错误 - 统一了模型方法调用 - 改进了类型安全性 - 优化了代码结构和可维护性
5.6 KiB
5.6 KiB
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库,具有以下特点:
- 更简洁的API:链式调用更直观
- 更好的性能:Unirest在性能方面有优势
- 更灵活的配置:支持更细粒度的配置
- 更现代的API:符合现代Java开发习惯
系统现在已经成功从RestTemplate迁移到Unirest,所有API调用功能保持不变!