AFHttpSessionManager - 导致 org.codehaus.jackson.JsonParseException 的多部分 POST
Posted
技术标签:
【中文标题】AFHttpSessionManager - 导致 org.codehaus.jackson.JsonParseException 的多部分 POST【英文标题】:AFHttpSessionManager - Multipart POST causing org.codehaus.jackson.JsonParseException 【发布时间】:2014-07-09 18:47:41 【问题描述】:我正在尝试使用 AFNetworking 2 的 AFHTTPSessionManager 将 pdf 内容发布到我的网络服务。我将 AFHTTPSessionManager 子类化,并将请求和响应序列化程序设置为相应的 AFJsonXXXSerializer。但是,当我将表单数据作为多部分请求发布时,我得到了 JsonParseException。我很确定这是一个直接的用例,我可能会遗漏一些东西。请帮忙,提前谢谢!
[accessMgr postDataToURL:@"objects-d2" usingParams:nil fileData:imageData andDelegate:self];
调用下面的方法来POST
-(void) postDataToURL:(NSString *) urlString usingParams:(id)parameters fileData: (NSData *)fileData andDelegate:(id<RemoteAccessDelegate>) remoteDelegate
//RESTSessionManager extends AFHTTPSessionMaanger
RESTSessionManager *manager = [self getManager:remoteDelegate];
[manager POST:urlString parameters: parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
[formData appendPartWithFileData:fileData name:@"content" fileName:@"test.pdf" mimeType:@"application/pdf"];
请求带有以下标头和表单数据
POST /d2fs/repositories/ls67sp2/objects-d2 HTTP/1.1
Host: localhost:8080
Content-Type: multipart/form-data; boundary=Boundary+422AF86226B68040
Connection: keep-alive
Transfer-Encoding: Chunked
Accept: application/json
User-Agent: IIG Mobile/1.1 (iPad Simulator; ios 7.1; Scale/2.00)
Accept-Language: en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5
Authorization: Basic bHNhZG1pbjpsc2FkbWlu
Accept-Encoding: gzip, deflate
--Boundary+422AF86226B68040
Content-Disposition: form-data; name="content"; filename="test.pdf"
Content-Type: application/pdf
%PDF-1.3
%ƒÂÚÂÎßÛ†–ƒ∆
<more file content>
我已验证尾随边界也已设置。从我的网络服务得到的响应是
"status": 400,
"code": "E_INPUT_ILLEGAL_ARGUMENTS",
"message": "There are illegal arguments provided.",
"details": "org.codehaus.jackson.JsonParseException: Unexpected character ('%' (code 37)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')\n at [Source: org.apache.commons.fileupload.MultipartStream$ItemInputStream@22a5cdce; line: 1, column: 2];Unexpected character ('%' (code 37)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')\n at [Source: org.apache.commons.fileupload.MultipartStream$ItemInputStream@22a5cdce; line: 1, column: 2]"
【问题讨论】:
【参考方案1】:我今天能够解决这个问题。在附加文件数据之前,我必须附加一个 json 对象,该对象是关于该对象的元数据,并且上传起到了作用!谢谢。
[formData appendPartWithFormData:data name:@"object"];
[formData appendPartWithFileData:fileData name:@"content" fileName:@"test.pdf" mimeType:@"application/pdf"];
【讨论】:
以上是关于AFHttpSessionManager - 导致 org.codehaus.jackson.JsonParseException 的多部分 POST的主要内容,如果未能解决你的问题,请参考以下文章
使用 AFNetworking 2.0 的 POST 请求 - AFHTTPSessionManager
AFNetworking 2.0 AFHTTPSessionManager
如何在 AFHTTPSessionManager 请求中添加原始正文?