我正在使用 Retrofit 2 创建一个多部分 form-data 请求,它可以正常工作并且服务器响应为 200。但是我在解析响应时遇到了问题。这是我的代码:
@POST("sync/mediaUpload")
@Multipart
Call<ResponseBody> uploadMediaFile(@Header("Authorization") String token,
@Part("userId") RequestBody userId,
@Part MultipartBody.Part file,
@Part("fileId") RequestBody photoId,
@Part("hash") RequestBody hash);
public Response<ResponseBody> uploadMediaFile(String token, String userId, File file, String fileName, String fileId, String hash) {
MediaService service = retrofit.create(MediaService.class);
MultipartBody.Part fileBody = prepareFilePart("file", file);
RequestBody userIdBody = RequestBody.create(MediaType.parse("text/plain"), userId);
RequestBody fileNameBody = RequestBody.create(MediaType.parse("text/plain"), fileName);
RequestBody fileIdBody = RequestBody.create(MediaType.parse("text/plain"), fileId);
RequestBody hashBody = RequestBody.create(MediaType.parse("text/plain"), hash);
Call<ResponseBody> call = service.uploadMediaFile(token, userIdBody, txIdBody, transIdBody, stepCodeBody,
fileBody, fileNameBody, fileIdBody, hashBody);
try {
return call.execute();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@NonNull
private MultipartBody.Part prepareFilePart(String partName, File file) {
RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), file);
return MultipartBody.Part.createFormData(partName, file.getName(), requestFile);
}
当文件上传正确时,服务器会返回一个Json对象。例如:
{
"fileName": "IMG_20190108_183751.jpg",
"fileId": "0",
"fileSizeInBytes": 216067
}
但是,在call.execute()中,Retrofit返回:
--MultipartDataMediaFormatterBoundary1q2w3e
Content-Disposition: form-data; name="FileName"
IMG_20190108_183751.jpg
--MultipartDataMediaFormatterBoundary1q2w3e
Content-Disposition: form-data; name="FileId"
0
--MultipartDataMediaFormatterBoundary1q2w3e
Content-Disposition: form-data; name="FileSizeInBytes"
216067
我该如何解析这个响应? 我尝试更改Retrofit服务的签名,使用一个对象而不是ResponseBody:
@POST("sync/mediaUpload")
@Multipart
Call<MediaUploadResponse> uploadMediaFile(@Header("Authorization") String token,
@Part("userId") RequestBody userId,
@Part MultipartBody.Part file,
@Part("fileId") RequestBody photoId,
@Part("hash") RequestBody hash);
我的对象
public class MediaUploadResponse {
public final String fileName;
public final String fileId;
public final long fileSizeInBytes;
public MediaUploadResponse(String fileName, String fileId, long
fileSizeInBytes) {
this.fileName = fileName;
this.fileId = fileId;
this.fileSizeInBytes = fileSizeInBytes;
}
}
但是Retrofit抛出了MalformedJsonException异常
有人知道如何解决吗?
谢谢。
{
开头。请检查一下。另外,在适配器类中,在read()
方法中,对于每一行以element.set...
开头的代码,可以设置一个断点来精确定位问题所在。 - Maxime Claude