我见过的每个示例和教程都展示了如何将请求体转换为JSON,而这并不是我需要的。
它在我的场景中没有效果,因为我没有与节点或w / e交谈,我会浪费计算。我必须在我的应用程序中转换为JSON,然后在后端从JSON解码,这是期望一个常规表单,我没有理由这样做。
我已经尝试了我能找到的每个教程/示例。
public interface myClient {
@GET("api/fetch-all")
Call<List<ServiceGenerator.Data>> data();
// How am I supposed to do this?
@POST("api/login")
Call<ServiceGenerator.Cookie> fetchCookie(@Body String email, String password);
}
答案 0 :(得分:1)
我像这样使用它
class User {
String email;
String password;
public User(String email, String password) {
this.email = email;
this.password = password;
}
}
然后就像你说的那样
@FormUrlEncoded
@POST("api/login")
Call<User> fetchCookie(@Field("email") String email, @Field("password") String password);
User user = new User("a@a.com", "1234");
mService.fetchCookie(user.email, user.password)
这样你最终使用FormURLEncoded方法发布。此外,Retrofit还提供了一些方法来覆盖ResponseBody
和RequestBody
的默认转换器。如文档中所述:
改装配置
Retrofit是用于转换API接口的类 进入可调用的对象。默认情况下,Retrofit会让你理智 您的平台的默认值,但它允许自定义。
CONVERTERS
默认情况下,Retrofit只能将HTTP主体反序列化为OkHttp ResponseBody类型,它只能接受其RequestBody类型 @body。
可以添加转换器以支持其他类型。六个兄弟模块 为方便起见,调整流行的序列化库。
Gson:com.squareup.retrofit2:converter-gson Jackson: com.squareup.retrofit2:converter-jackson Moshi: com.squareup.retrofit2:converter-moshi Protobuf: com.squareup.retrofit2:converter-protobuf Wire: com.squareup.retrofit2:converter-wire简单XML: com.squareup.retrofit2:converter-simplexml标量(基元,盒装, 和字符串):com.squareup.retrofit2:converter-scalars这是一个 使用GsonConverterFactory类生成的示例 GitHubService接口的实现,它使用Gson 反序列化。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
GitHubService service = retrofit.create(GitHubService.class);
CUSTOM CONVERTERS
如果您需要与使用内容格式的API进行通信 Retrofit不支持开箱即用(例如YAML,txt,custom 格式)或您希望使用不同的库来实现 现有格式,您可以轻松创建自己的转换器。创建一个 扩展Converter.Factory类并传入实例的类 在构建适配器时。
希望有所帮助