我需要发送这样的帖子请求:
{
"request": "AppStart",
"appKey": "d7ea9ac1-8eb0-44f8-809d-bff6944db6c7",
"param" : {
"somedata" : "data"
},
"buildId": "111111111-1111-1111-1111-11111111111"
}
我为寄存器应用编写了简单的函数:
public interface RestClient {
@Headers("Content-Type: application/json" )
@FormUrlEncoded
@POST("/")
<T> void callMethod(
@Field("request") String method,
@Field("appKey") String key,
@Field("param") JsonObject params,
);
public void registerUser(String key, string userID) {
JsonObject params = new JsonObject().putProperty("userId" userID);
api.callMethod("registerUser", key, params);
}
这是改造日志:
请求= registerUser&安培; APPKEY = 123bff6944db6c7&安培; PARAM =%7B%22deviceUdid%22%3A%2276839a55470a2cd4%22%7D
如何修复我的代码?
答案 0 :(得分:0)
在registerUser
方法中构建一个反映所需JSON结构的对象,然后使用Retrofit的@Body
注释。
public void registerUser(String key, string userID) {
CallMethodBody callMethodBody = ...
api.callMethod(callMethodBody);
}
public interface RestClient {
@Headers("Content-Type: application/json" )
@FormUrlEncoded
@POST("/")
<T> void callMethod(@Body CallMethodBody callMethodBody);
}
这会将整个JSON字符串作为POST请求的主体发送。
答案 1 :(得分:0)
而不是@Field
,您应该使用@Body
。
请求正文
可以指定一个对象用作HTTP请求主体 @Body注释。
@POST("/users/new") void createUser(@Body User user, Callback<User> cb);
也可以使用RestAdapter的转换器转换对象。
参考:http://square.github.io/retrofit/
您需要创建代表您的请求主体的类,例如:
public class Data {
String request;
String appKey;
String buildId;
Param param;
}
public class Param {
String somedata;
}
接下来,您可以将此类用作请求正文:
public interface RestClient {
@Headers("Content-Type: application/json")
@FormUrlEncoded
@POST("/")
<T> void callMethod(@Body Data data);
public void registerUser(Data data) {
api.callMethod(data);
}
}