之前發送請求傳給后臺的參數都是 NSDictionary
類型的,最近后臺要求傳參數是 json
類型。
代碼如下:
// 請求頭
NSString *accessPath = @"http://xxx/getList";
// 請求參數字典
NSDictionary *params = @{@"type":@"1", @"name":@"2"};
NSLog(@"發送請求url=%@,params=%@",accessPath,params);
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:accessPath parameters:params error:nil];
request.timeoutInterval = 10.f;
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSURLSessionDataTask *task = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
NSLog(@"-----responseObject===%@+++++",responseObject);
if (!error) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
// 請求成功數據處理
} else {
}
} else {
NSLog(@"請求失敗error=%@", error);
}
}];
[task resume];
說明:
找了一圈無果,最后在 AFNetworking請求序列化 介紹里面找到了,圖樣圖森破啊。翻譯如下:
AFNetworking
請求序列化:
請求序列化通過請求的URL字符串創建請求,編碼參數作為查詢字符串或HTTP體。以下面請求為例:
NSString *URLString = @"http://example.com";
NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};
- 1、查詢字符串參數編碼
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3
- 2、URL表單參數編碼
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/Content-Type: application/x-www-form-urlencodedfoo=bar&baz[]=1&baz[]=2&baz[]=3
- 3、JSON參數編碼
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/Content-Type: application/json{"foo": "bar", "baz": [1,2,3]}
第三種就是我們要求的,搞定~
AFNetworking 請求序列化