Java - Retrofit 2请求良好实践

时间:2015-11-03 01:58:30

标签: java android json retrofit

我目前正在为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中遗漏它,但是当你从未使用它时,网站不是很清楚。如果它存在,我没有找到任何使用它的样本。

1 个答案:

答案 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);

希望这有帮助!