簡體   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