2015-11-03 74 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