Android改造,序列化POST参数

时间:2014-11-19 08:39:41

标签: android retrofit okhttp

我正在使用Retrofit发布表单数据并收回XML。到目前为止,我的工作正常,但我想做一些改变。这是我现有的代码(并且有效):

这是我的界面

public interface SignupUser
{
      @FormUrlEncoded
      @POST("/createaccount.cfm")
      SignupServerResponse signup(@Field("e") String email, @Field("p") String password);
}

这是调用api的代码(再次,这个工作正常,我将在下面解释我想要改变的内容)

SignUpDetails mDeets; // this gets initialize and set somewhere else


RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint("http://myurl.com")
            .setConverter(new SimpleXMLConverter()).build(); // the response is xml, that works fine

SignupUser service = restAdapter.create(SignupUser.class);

SignupServerResponse res = service.signup(mDeets.getE(), mDeets.getP());

如何才能将SignUpDetails对象直接传递给signup()方法,而不是传递单独的字符串?当我更改signup()的构造函数以接受SignUpdetails对象(见下文)并传递我的SignUpDetails对象时,我收到错误说

  

找不到改造注释

以下是我要如何定义界面

public interface SignupUser
{
        @FormUrlEncoded
        @POST("/createaccount.cfm")
        SignupServerResponse signup(SignUpDetails deets);
}

并像这样调用它(而不是传递所有这些参数)

SignupServerResponse res = service.signup(mDeets);

我尝试在SignUpDetails类中的每个变量上面添加@Field,这也不起作用(编译错误)

1 个答案:

答案 0 :(得分:-1)

在您的界面上使用@Body注释作为deets参数:

@POST("/createaccount.cfm")
SignupServerResponse signup(@Body SignUpDetails deets);

这应该将SignUpDetails转换为XML(因为您在适配器上使用xml转换器)。 然后,您有责任在服务器上解析XML请求主体。