不太确定如何标题,但有没有更简单的方法使用Retrofit将数据发布到WCF服务?目前我正在使用@Body属性和类似的东西。服务期望json:
这是我想通过
发送的内容public class Photo
{
private String imageData;
private String latitude;
private String longitude;
public Photo(String imageData, String latitude, String longitude)
{
this.imageData = imageData;
this.latitude = latitude;
this.longitude = longitude;
}
public String getImageData()
{
return imageData;
}
public void setImageData(String imageData)
{
this.imageData = imageData;
}
public String getLatitude()
{
return latitude;
}
public void setLatitude(String latitude)
{
this.latitude = latitude;
}
public String getLongitude()
{
return longitude;
}
public void setLongitude(String longitude)
{
this.longitude = longitude;
}
}
有了这个:
@POST("/PhotoService.svc/addPhoto")
void addPhoto(@Body Photo photo, Callback<String> cb);
然后我这样称呼它:
IPhotoService photoService = restAdapter.create(IPhotoService.class);
photoService .addPhoto(new Photo(photoSerialised, String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())), new Callback<String>()
这一切都运行正常,但我有多个具有各种参数的服务端点。我是否需要为每个“身体”创建一个模型,或者是否有更简单的方法。与做GET类似?
我尝试使用@Field,其中有多个参数,但在我的WCF端,我的参数为null。简单地发送一个带有@Body属性的类可以正常工作,但是我不想为每个可用的服务端点创建一个模型类,或者没有别的办法吗?
答案 0 :(得分:1)
有两种方法可以使用POST请求输入参数
首先,您可以使用 @FieldMap ,查看链接Retrofit Javadoc,该服务必须与 @FormUrlEncoded 注释一起使用
其次,您实际上可以使用 MultipartTypedOutput 将参数放入 @Body Example of putting parameter into body,但在Retrofit中不再存在 MultipartTypedOutput 2.0.0-β1
因此,如果您想将图像与其他参数一起上传,也许您可以这样做
@POST("/PhotoService.svc/addPhoto")
void addPhoto(@Body Photo photo,@FieldMap Map<String, String> fields, Callback<String> cb);
//Example
Map<String,String> fields = new HashMap<String,String>();
fields.put("params1","value of params");
fields.put("params2","value of params 2");
Photo photo = new Photo(photoSerialised, String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude()));
photoService .addPhoto(photo,fields,new Callback<String>()
顺便说一下你实际上可以在 @Part 或 @PartMap 中使用Multipart请求,请在Retrofit javadoc中找到它,有一个例子