繁体   English   中英

如何使用改造在多部分表单请求中发送POJO对象?

[英]How can I send a POJO object in a Multipart-form Request using Retrofit?

我正在尝试使用RetrofitMultipart-form请求中发送以下内容:

{ "attachment": { 
    "file_cache": "....."
    "original": "upload/image.png",
    "versions": {
        "small": "uploads/small_image.png"
    }
    },
  "content": "",
  "id": 1
}

我不知道这是我应该发送给API的正确请求,因为它们的文档确实很糟糕,但是我能够使用Chrome Dev Tools研究API明智地接收了什么以及它如何响应,它似乎接受JSON。

这是我观察到的照片:

在此处输入图片说明

他们的文档仅声明"attachment"应为对象。

在此处输入图片说明

是否可以通过multipart-form请求发送POJO对象? 我的REST接口如下所示:

@Multipart
@POST("/v2/{type}/{id}/message.json")
void addMessage(@Path("type") String type,
                @Path("id") int id,
                @Part("content") String content,
                @Part("attachment") MultipartTypedOutput multipartTypedOutput,
                Callback<Post> callback);

发送MultipartTypedOutput不起作用,也不使用以下命令:

addMessage(...., @Part("attachment") POJOObject object, ...);

关于如何做到这一点的任何想法?

如果尝试使用Retrofit发送POJO对象,则会得到状态422无法处理的实体。

您尝试过TypedFile吗? 如果不这样尝试

@Multipart
@POST("/v2/{type}/{id}/message.json")
void addMessage(@Path("type") String type,
                @Path("id") int id,
                @Part("content") String content,
                @Part("attachment") TypedFile photoFile,
                Callback<Post> callback);

对于TypedFile,您可以通过这种方式传递附件,

File attachmentFile = new File("upload/image.png");
TypedFile attachmentTypedFile = new TypedFile("image/*", photoFile);

通过点击这里的链接,我能够解决这个问题

我不知道这一点,但是要发送JSON您需要像这样设置REST API Service

@Multipart
@POST("/v2/{type}/{id}/message.json")
void addMessage(@Path("type") String type,
            @Path("id") int id,
            @Part("content") String content,
            @Part("attachment[file_cache]") String fileCache,
            @Part("attachment[original]") String original,
            @Part("attachment[versions][small]") String small,
            Callback<Post> callback);

希望这可以帮助其他人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM