POST body参数对象

时间:2015-09-12 22:10:17

标签: android wcf retrofit

不太确定如何标题,但有没有更简单的方法使用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属性的类可以正常工作,但是我不想为每个可用的服务端点创建一个模型类,或者没有别的办法吗?

1 个答案:

答案 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中找到它,有一个例子