表单请求
1. 普通表单
@FormUrlEncoded
:表示请求体是一个 Form 表单
Content-Type:application/x-www-form-urlencoded
采用 @Field
注解:
@FormUrlEncoded
@POST("login/login")
Call<ResponseBody> login(@Field("mail") String mail, @Field("password") String password);
采用 @FieldMap
注解:
@FormUrlEncoded
@POST("login/login")
Call<ResponseBody> login(@FieldMap Map<String, String> map);
2. Mutipart 表单
@Multipart
:表示请求体是一个支持文件上传的 Form 表单
Content-Type:multipart/form-data
@Part
注解支持的类型有:
@Part MultipartBody.Part
@Part("name") RequestBody name
@PartMap Map<String, RequestBody>
除了 okhttp3.MultipartBody.Part 之外,其他类型都必须带上表单字段,因为 okhttp3.MultipartBody.Part 中已经包含了表单字段的信息。
@Multipart
@POST("FileServlet?style=UploadFiles")
Call<ResponseBody> uploadFiles(@Part MultipartBody.Part filePart);
// @Part("name") RequestBody requestBody
上传示例:
File file = new File("D:\\test.txt");
String partName = "file";
String fileName = file.getName();
final MediaType MEDIA_OBJECT_STREAM =
MediaType.parse("application/octet-stream; charset=UTF-8");
RequestBody fileBody = RequestBody.create(MEDIA_OBJECT_STREAM, file);
MultipartBody.Part filePart = MultipartBody.Part.createFormData(partName, fileName, fileBody);
Call<ResponseBody> uploadFile = inteCastService.uploadFiles(filePart);
GET 方式请求 JSON 数据并解析得到 GSON 对象
// Repo 是由 Android Studio 插件 GsonFormat 从 JSON 字符串自动生成的类
interface GithubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
private void connect() {
Retrofit retrofit = new Retrofit.Builder()