我目前正在为Android应用程序使用改造。 这对我来说很新鲜,而且我试图找出处理简单请求的最佳方法而不会弄乱。
我的客户端正在使用JSON与我的服务器进行通信(改进版的JacksonConverter)。 所以现在,我最终做了这样的事情:
public interface MyWebService {
class RequestLogin {
public String email;
public String hash;
public RequestLogin(String email, String hash) {
this.email = email;
this.hash = hash;
}
}
@POST("/login")
Call<String> login(@Body RequestLogin body);
}
public void someFunction() {
Call<String> call = serviceInstance.login(new RequestLogin("some_mail", "some_hash"));
}
在这里,您可以看到我的/login
路由采用简单的JSON:
{
"email": "some_email_here",
"hash": "some_passwd_hash_here"
}
并在正文中返回一个简单的字符串。
这并不是那么糟糕,但我担心随着时间的推移,事情会变得混乱。
创建对象是使用改造在请求正文中使用JSON的唯一方法吗?
也许有办法做这样的事情:
@POST("/login")
Call<String> login(@MagicTag String email, @MagicTag String hash);
我可能会从库中的javadoc中遗漏它,但是当你从未使用它时,网站不是很清楚。如果它存在,我没有找到任何使用它的样本。
答案 0 :(得分:0)
in:http://square.github.io/retrofit/:
FORM ENCODED AND MULTIPART
也可以声明方法以发送表单编码和多部分数据。
当方法上存在@FormUrlEncoded时,将发送表单编码数据。每个键值对都使用@Field进行注释,其中包含名称和提供值的对象。
@FormUrlEncoded
@POST("/user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
在你的情况下应该是:
@FormUrlEncoded
@POST("/login")
Call<String> login(@Field("email") String email, @Field("hash") String hash);
希望这有帮助!