ios - Post JSON Body + MultiPart RestKit 0.2x 失败

标签 ios restkit restkit-0.20

我正在尝试发布带有附加文件的对象。

 NSMutableURLRequest *request =
            [objectManager multipartFormRequestWithObject:reqDocObj
                                                   method:RKRequestMethodPOST
                                                     path:@"syncDocument.json"
                                               parameters:nil
                                constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                                    [formData appendPartWithFileData:UIImagePNGRepresentation([UIImage imageNamed:@"graybox.png"])
                                                                name:@"image"
                                                            fileName:@"some_file"
                                                            mimeType:@"image/jpeg"];

            }];



RKObjectRequestOperation *operation =
            [objectManager
             objectRequestOperationWithRequest:request
                                       success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {


                                       }  
                                    failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                                          NSLog(@"WS: errore operazione di richiesta %@",error);


                                        }  
             ];  


            [objectManager enqueueObjectRequestOperation:operation];

objectManager 配置为:

    [objectManager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];
    [objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];
    objectManager.requestSerializationMIMEType = RKMIMETypeJSON;

[编辑]

我的mapepd对象是SynchDocObj:

requestDocMapping = [RKObjectMapping mappingForClass:[SynchDocObj class]];
[requestDocMapping addAttributeMappingsFromDictionary:mappingDocDict];

问题是:

1) 在RKlogs中,将request.body = null和JSON对象放入form-data

2) 服务器无法解码正文,因为它是 null

我的问题是:

1) 我是否以错误的方式发送 JSON 对象?

2) 如果是,如何通过文件上传发送 JSON 对象,即作为多部分请求? 问候!

[解决方案]

根据答案的建议,我认为解决方案是1)从表单数据而不是正文中检索映射对象; 2) 或者发布一个 nil 对象并在表单数据中放入一个 JSON 字符串。

最佳答案

这个:

[objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;

是同一件事的两种不同表达方式 - 而您不想使用其中任何一种。您需要以表单 URL 编码(默认值)的形式发送请求。

最简单的方法是使用与当前代码中相同的表单来创建请求,提前生成 JSON,然后使用 appendPartWithFormData:name: 将其添加到请求中(只需在添加文件之前)。

要生成 JSON,您可以使用 RestKit (RKMappingOperation),或者您可以只创建内容字典/数组,然后使用 NSJSONSerialization 序列化要添加的对象到请求。

关于ios - Post JSON Body + MultiPart RestKit 0.2x 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20641720/

相关文章:

ios - 核心数据对象变为空

ios - RestKit:如何获取一个简单的 JSON 字符串数组?

ios - 圆角矩形框绘制-iOS

ios - 评价这个应用程序的功能

iOS RestKit - 映射结果,只有一个属性

ios - 如何使用 RestKit 0.20.3 的对象映射将 "@"映射为 JSON 字符串名称的第一个字符?

iOS-选择整数数组中第二小的数字

ios - UITableViewCell 中的图像 url 异步但按顺序加载

ios - 你如何在 RestKit 0.20 中使用 RKDotNetDateFormatter?

iphone - iOS 后台 Location 不发送 http 请求