我正在使用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()方法,而不是传递单独的String?当我将signup()的构造函数更改为接受SignUpdetails对象(请参见下文)并传递我的SignUpDetails对象时,出现一条错误消息
找不到翻新注释
这是我想定义接口的方式
public interface SignupUser
{
@FormUrlEncoded
@POST("/createaccount.cfm")
SignupServerResponse signup(SignUpDetails deets);
}
并这样称呼它(而不是传递所有这些参数)
SignupServerResponse res = service.signup(mDeets);
我尝试在SignUpDetails类的每个变量上方添加@Field,但这也不起作用(编译错误)
最佳答案
在您的界面上,将@Body注释用于deets参数:
@POST("/createaccount.cfm")
SignupServerResponse signup(@Body SignUpDetails deets);
那应该将SignUpDetails转换成XML(因为您在适配器上使用了xml转换器)。
然后,您有责任在服务器上解析XML请求正文。