在改造时,@Body
可以是任何类,可以在初始化RestAdapter
或TypedOutput
时使用Converter
进行序列化。
通常,如果您在处理JSON,那么您只需创建POJO类,该类将通过Retrofit自动序列化为JSON。如果你不处理JSON,或者试图合并2库之间的差距,那么你可以将你的InputStreamEntity
包装到你自己的TypedOutput
的实现中。
这是一个小例子。
// JSON here is merely used for content, as mentioned use serialization if your content is JSON
String body = "{\"firstname\": \"Parth\", \"lastname\": \"Srivastav\"}";
ByteArrayInputStream inputStream = new ByteArrayInputStream(body.getBytes("UTF-8"));
// Here is your HttpEntity, I've simply created it from a String for demo purposes.
HttpEntity httpEntity = new InputStreamEntity(inputStream, inputStream.available(), ContentType.APPLICATION_JSON);
// Create your own implementation of TypedOutput
TypedOutput payload = new TypedOutput() {
@Override
public String fileName() {
return null;
}
@Override
public String mimeType() {
return httpEntity.getContentType().getValue();
}
@Override
public long length() {
return httpEntity.getContentLength();
}
@Override
public void writeTo(OutputStream out) throws IOException {
httpEntity.writeTo(out);
}
};
然后定义你的接口,像这样
@POST ("/x")
CustomClass custom(
@Query("ctid") String ctid,
@Body TypedOutput payload
);
,并执行它,像这样使用对象从上面。
api.custom("1", payload);
但是如前所述,如果你实际使用JSON工作那么这里就是你如何设置代码一个简单的例子。
比方说,你想要的
{
"firstname": "Parth",
"lastname": "Srivastav"
}
一个JSON身体,你会创造出你可以调用用户让一个Java类说
public class User {
public String firstname;
public String lastname;
public User(String firstname; String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
}
修改你的界面,像这样
@POST ("/x")
CustomClass custom(
@Query("ctid") String ctid,
@Body User payload
);
并像这样使用它
api.custom("1", new User("Parth", "Srivastav"));
这是正确的,但更好的方法来得到这个JSON输出是为了让一个类有两个字段,让Gson为你序列化它。 – 2014-08-28 15:43:28
@JakeWharton是正确的,我已经更新了我的帖子,对此有点更清楚。 – 2014-08-28 16:07:36