【问题标题】:How can I send a POJO object in a Multipart-form Request using Retrofit?如何使用 Retrofit 在 Multipart-form Request 中发送 POJO 对象?
【发布时间】:2015-10-01 05:15:36
【问题描述】:

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

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

我不知道这是否是我应该向 API 发送的正确请求,因为他们的文档非常糟糕,但我能够使用 Chrome 开发工具来研究 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 不可处理的实体。

【问题讨论】:

    标签: java android retrofit pojo multipartform-data


    【解决方案1】:

    我可以通过点击这个链接here来解决这个问题。

    我不知道这一点,但为了发送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);
    

    希望这可以帮助其他人。

    【讨论】:

      【解决方案2】:

      你试过 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);
      

      【讨论】:

        猜你喜欢
        • 2021-06-08
        • 2016-05-06
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 1970-01-01
        • 2013-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多