本文最后更新于 41 天前,其中的信息可能已经有所发展或是发生改变。
Retrofit 是用于 Android 和 Java 的 HTTP 客户端,它简化了与 RESTful API 的交互。通过 Retrofit 可以非常方便地向服务器发送 HTTP 请求,并将响应结果映射到 Java 对象中。Retrofit 支持多种网络请求方式,支持异步请求、同步请求、文件上传下载等。使用步骤如下:
1. 引入 Maven 依赖
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-jackson</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>adapter-rxjava2</artifactId>
<version>2.9.0</version>
</dependency>
2. 定义 HTTP 接口
public interface ChatService {
@POST("/api/v1/services/aigc/text-generation/generation")
@Headers("Content-Type: application/json")
Call<ChatResponse> chat(@Header("Authorization") String authorization,
@Body ChatRequest request);
}
Call 对象是对一个具体 HTTP 请求的封装,包含以下信息:
- 请求体(由 @Body ChatRequest 序列化后的 JSON 数据)
- 请求方法(如 POST)、URL(基于 baseUrl 和接口中的路径注解)
- 请求头(如 Authorization 和 Content-Type)
3. 创建 Retrofit 实例
public ChatServiceImpl chatService() {
ChatService chatService = new Retrofit.Builder()
.baseUrl(configuration.getApiHost())
.client(httpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(JacksonConverterFactory.create())
.build()
.create(ChatService.class);
return new ChatServiceImpl(chatService, configuration);
}
4. 生成动态代理对象并发起请求
当调用 Retrofit 的 create(ChatService.class) 方法时,Retrofit 会 动态生成 ChatService 接口的实现类,通过生成的代理对象调用接口方法,并执行网络请求
public class ChatServiceImpl {
private ChatService chatService; // Retrofit 生成的代理对象
private Configuration configuration;
public ChatResponse chat(ChatRequest chatRequest) throws IOException {
// 调用代理方法,生成 Call 对象
Call<ChatResponse> call = chatService.chat(
configuration.getAuthorization(), // "Bearer <apiKey>"
chatRequest
);
// 同步执行请求
Response<ChatResponse> execute = call.execute();
return execute.body();
}
}