2015-11-03 79 views
0

我目前正在爲Android應用程序使用改造。 這對我來說是非常新穎的,我試圖找出處理簡單請求而不會變得混亂的最佳方法。Java - 改進2請求良好實踐

我的客戶正在使用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

在:http://square.github.io/retrofit/

形式編碼和多

方法也可以聲明發送形式編碼和多數據。

當方法中存在@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);

希望這有助於!

+0

感謝您的回答。我認爲@FormUrlEncoded被用來暗示在URL中添加參數,而不是在JSON中添加參數。我會盡快嘗試,並讓你知道 – Ganitzsh

+0

@Ganitzsh在這個:)的任何更新? – jadkachmar

+0

抱歉,延遲。我試過了,它不起作用。正如預期的那樣,它將作爲表單發送到服務器,而不是發送到請求的正文中。 – Ganitzsh