From c47e553425f91b5d365b6262ba80ec646a010e3c Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 13 Mar 2013 23:45:10 -0700 Subject: [PATCH] added file upload support --- .../petstore/objc/ObjcPetstoreCodegen.scala | 2 + .../PetstoreClient.xcodeproj/project.pbxproj | 10 ++ .../UserInterfaceState.xcuserstate | Bin 31594 -> 31528 bytes .../petstore/objc/client/NIKApiInvoker.h | 26 ++--- .../petstore/objc/client/NIKApiInvoker.m | 61 +++++++++--- samples/client/petstore/objc/client/NIKDate.h | 3 +- samples/client/petstore/objc/client/NIKFile.h | 17 ++++ samples/client/petstore/objc/client/NIKFile.m | 26 +++++ .../client/petstore/objc/client/NIKPetApi.m | 54 ++++++++++- .../client/petstore/objc/client/NIKStoreApi.m | 32 ++++++- .../client/petstore/objc/client/NIKUserApi.m | 89 ++++++++++++++++-- .../client/petstore/objc/tests/PetApiTest.m | 1 + 12 files changed, 277 insertions(+), 44 deletions(-) create mode 100644 samples/client/petstore/objc/client/NIKFile.h create mode 100644 samples/client/petstore/objc/client/NIKFile.m diff --git a/samples/client/petstore/objc/ObjcPetstoreCodegen.scala b/samples/client/petstore/objc/ObjcPetstoreCodegen.scala index 4c0989b1cb..d76b7cd025 100644 --- a/samples/client/petstore/objc/ObjcPetstoreCodegen.scala +++ b/samples/client/petstore/objc/ObjcPetstoreCodegen.scala @@ -32,6 +32,8 @@ object ObjcPetstoreCodegen extends BasicObjcGenerator { ("NIKSwaggerObject.m", destinationDir, "NIKSwaggerObject.m"), ("NIKApiInvoker.h", destinationDir, "NIKApiInvoker.h"), ("NIKApiInvoker.m", destinationDir, "NIKApiInvoker.m"), + ("NIKFile.h", destinationDir, "NIKFile.h"), + ("NIKFile.m", destinationDir, "NIKFile.m"), ("NIKDate.h", destinationDir, "NIKDate.h"), ("NIKDate.m", destinationDir, "NIKDate.m")) } diff --git a/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.pbxproj b/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.pbxproj index acf6e2dbb9..ae869b98dd 100644 --- a/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.pbxproj @@ -45,6 +45,9 @@ EA07F54816135916006A2112 /* NIKUser.m in Sources */ = {isa = PBXBuildFile; fileRef = EA07F51F1613569A006A2112 /* NIKUser.m */; }; EA07F54916135916006A2112 /* NIKUserApi.h in Sources */ = {isa = PBXBuildFile; fileRef = EA07F5201613569A006A2112 /* NIKUserApi.h */; }; EA07F54A16135916006A2112 /* NIKUserApi.m in Sources */ = {isa = PBXBuildFile; fileRef = EA07F5211613569A006A2112 /* NIKUserApi.m */; }; + EA4F4D3816F1A90A00F24B35 /* NIKFile.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4F4D3716F1A90A00F24B35 /* NIKFile.m */; }; + EA4F4D3916F1A92E00F24B35 /* NIKFile.h in Sources */ = {isa = PBXBuildFile; fileRef = EA4F4D3616F1A90A00F24B35 /* NIKFile.h */; }; + EA4F4D3A16F1A92E00F24B35 /* NIKFile.m in Sources */ = {isa = PBXBuildFile; fileRef = EA4F4D3716F1A90A00F24B35 /* NIKFile.m */; }; EA5A034416141443003B3E41 /* UserApiTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EA5A034316141443003B3E41 /* UserApiTest.m */; }; EAE96DE616138695004AB97C /* PetApiTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EA81837816137FD500341A6E /* PetApiTest.m */; }; EAE96DE716138695004AB97C /* PetApiTest.h in Sources */ = {isa = PBXBuildFile; fileRef = EA81837916137FD500341A6E /* PetApiTest.h */; }; @@ -104,6 +107,8 @@ EA07F5211613569A006A2112 /* NIKUserApi.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIKUserApi.m; path = ../client/NIKUserApi.m; sourceTree = ""; }; EA07F5301613580E006A2112 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; EA07F53216135819006A2112 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + EA4F4D3616F1A90A00F24B35 /* NIKFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIKFile.h; path = ../client/NIKFile.h; sourceTree = ""; }; + EA4F4D3716F1A90A00F24B35 /* NIKFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIKFile.m; path = ../client/NIKFile.m; sourceTree = ""; }; EA5A034216141443003B3E41 /* UserApiTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UserApiTest.h; path = ../tests/UserApiTest.h; sourceTree = ""; }; EA5A034316141443003B3E41 /* UserApiTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UserApiTest.m; path = ../tests/UserApiTest.m; sourceTree = ""; }; EA81837816137FD500341A6E /* PetApiTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PetApiTest.m; path = ../tests/PetApiTest.m; sourceTree = ""; }; @@ -134,6 +139,8 @@ EA07F4AE16134F27006A2112 = { isa = PBXGroup; children = ( + EA4F4D3616F1A90A00F24B35 /* NIKFile.h */, + EA4F4D3716F1A90A00F24B35 /* NIKFile.m */, EA81837C1613809300341A6E /* Tests */, EA07F52D1613569E006A2112 /* Generated Client */, EA07F4BF16134F27006A2112 /* PetstoreClient */, @@ -336,6 +343,7 @@ EA07F52A1613569A006A2112 /* NIKTag.m in Sources */, EA07F52B1613569A006A2112 /* NIKUser.m in Sources */, EA07F52C1613569A006A2112 /* NIKUserApi.m in Sources */, + EA4F4D3816F1A90A00F24B35 /* NIKFile.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -343,6 +351,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + EA4F4D3916F1A92E00F24B35 /* NIKFile.h in Sources */, + EA4F4D3A16F1A92E00F24B35 /* NIKFile.m in Sources */, EAE96DE616138695004AB97C /* PetApiTest.m in Sources */, EAE96DE716138695004AB97C /* PetApiTest.h in Sources */, EA07F53516135916006A2112 /* NIKApiInvoker.h in Sources */, diff --git a/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.xcworkspace/xcuserdata/tony.xcuserdatad/UserInterfaceState.xcuserstate b/samples/client/petstore/objc/PetstoreClient/PetstoreClient.xcodeproj/project.xcworkspace/xcuserdata/tony.xcuserdatad/UserInterfaceState.xcuserstate index 541e88001ebfa4d8811dc04602e1e06c88f07374..d50f3ca0215beed855cb63c416a9763182532af8 100644 GIT binary patch delta 15592 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 Z@`m^Z+gqaqgtn7nuF3Yd_jg0;{{!NqkB0yN delta 15736 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 CgVWdm diff --git a/samples/client/petstore/objc/client/NIKApiInvoker.h b/samples/client/petstore/objc/client/NIKApiInvoker.h index 4737e92b59..2d6977eadc 100644 --- a/samples/client/petstore/objc/client/NIKApiInvoker.h +++ b/samples/client/petstore/objc/client/NIKApiInvoker.h @@ -21,18 +21,20 @@ -(NSString*) escapeString:(NSString*) string; --(void) dictionary:(NSString*) path - method:(NSString*) method - queryParams:(NSDictionary*) queryParams - body:(id)body - headerParams:(NSDictionary*) headerParams - completionBlock:(void (^)(NSDictionary*, NSError *))completionBlock; +-(void) dictionary: (NSString*) path + method: (NSString*) method + queryParams: (NSDictionary*) queryParams + body: (id)body + headerParams: (NSDictionary*) headerParams + contentType: contentType + completionBlock: (void (^)(NSDictionary*, NSError *))completionBlock; --(void) stringWithCompletionBlock:(NSString*) path - method:(NSString*) method - queryParams:(NSDictionary*) queryParams - body:(id)body - headerParams:(NSDictionary*) headerParams - completionBlock:(void (^)(NSString*, NSError *))completionBlock; +-(void) stringWithCompletionBlock: (NSString*) path + method: (NSString*) method + queryParams: (NSDictionary*) queryParams + body: (id)body + headerParams: (NSDictionary*) headerParams + contentType: contentType + completionBlock: (void (^)(NSString*, NSError *))completionBlock; @end diff --git a/samples/client/petstore/objc/client/NIKApiInvoker.m b/samples/client/petstore/objc/client/NIKApiInvoker.m index 1873ef724d..819930ef66 100644 --- a/samples/client/petstore/objc/client/NIKApiInvoker.m +++ b/samples/client/petstore/objc/client/NIKApiInvoker.m @@ -1,4 +1,5 @@ #import "NIKApiInvoker.h" +#import "NIKFile.h" @implementation NIKApiInvoker @@ -58,12 +59,13 @@ static NSInteger __LoadingObjectsCount = 0; kCFStringEncodingUTF8)); } --(void) dictionary:(NSString*) path - method:(NSString*) method - queryParams:(NSDictionary*) queryParams - body:(id) body - headerParams:(NSDictionary*) headerParams - completionBlock:(void (^)(NSDictionary*, NSError *))completionBlock +-(void) dictionary: (NSString*) path + method: (NSString*) method + queryParams: (NSDictionary*) queryParams + body: (id) body + headerParams: (NSDictionary*) headerParams + contentType: (NSString*) contentType + completionBlock: (void (^)(NSDictionary*, NSError *))completionBlock { NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path]; NSString * separator = nil; @@ -111,6 +113,21 @@ static NSInteger __LoadingObjectsCount = 0; data = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error]; } + else if ([body isKindOfClass:[NIKFile class]]){ + NIKFile * file = (NIKFile*) body; + + NSString *boundary = @"Fo0+BAr"; + contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; + + // add the body + NSMutableData *postBody = [NSMutableData data]; + [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[@"Content-Disposition: form-data; name= \"some_name\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image_file\"; filename=\"%@\"\r\n", file] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", file.mimeType] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData: file.data]; + [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + } else if ([body isKindOfClass:[NSArray class]]){ data = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error]; @@ -122,7 +139,7 @@ static NSInteger __LoadingObjectsCount = 0; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:data]; - [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; } // Handle caching on GET requests @@ -174,12 +191,13 @@ static NSInteger __LoadingObjectsCount = 0; }]; } --(void) stringWithCompletionBlock:(NSString*) path - method:(NSString*) method - queryParams:(NSDictionary*) queryParams - body:(id) body - headerParams:(NSDictionary*) headerParams - completionBlock:(void (^)(NSString*, NSError *))completionBlock +-(void) stringWithCompletionBlock: (NSString*) path + method: (NSString*) method + queryParams: (NSDictionary*) queryParams + body: (id) body + headerParams: (NSDictionary*) headerParams + contentType: (NSString*) contentType + completionBlock: (void (^)(NSString*, NSError *))completionBlock { NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path]; NSString * separator = nil; @@ -227,6 +245,21 @@ static NSInteger __LoadingObjectsCount = 0; data = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error]; } + else if ([body isKindOfClass:[NIKFile class]]){ + NIKFile * file = (NIKFile*) body; + + NSString *boundary = @"Fo0+BAr"; + contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; + + // add the body + NSMutableData *postBody = [NSMutableData data]; + [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[@"Content-Disposition: form-data; name= \"some_name\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image_file\"; filename=\"%@\"\r\n", file] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", file.mimeType] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData: file.data]; + [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + } else if ([body isKindOfClass:[NSArray class]]){ data = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error]; @@ -238,7 +271,7 @@ static NSInteger __LoadingObjectsCount = 0; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:data]; - [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; } diff --git a/samples/client/petstore/objc/client/NIKDate.h b/samples/client/petstore/objc/client/NIKDate.h index b72c7dc547..3af47f7e4f 100644 --- a/samples/client/petstore/objc/client/NIKDate.h +++ b/samples/client/petstore/objc/client/NIKDate.h @@ -9,5 +9,4 @@ - (id) initWithValues: (NSString*)input; -(NSString*) toString; -@end - +@end \ No newline at end of file diff --git a/samples/client/petstore/objc/client/NIKFile.h b/samples/client/petstore/objc/client/NIKFile.h new file mode 100644 index 0000000000..0340925767 --- /dev/null +++ b/samples/client/petstore/objc/client/NIKFile.h @@ -0,0 +1,17 @@ +#import + +@interface NIKFile : NSObject { +@private + NSString* name; + NSString* mimeType; + NSData* data; +} +@property(nonatomic, readonly) NSString* name; +@property(nonatomic, readonly) NSString* mimeType; +@property(nonatomic, readonly) NSData* data; + +- (id) initWithNameData: (NSString*) filename + mimeType: (NSString*) mimeType + data: (NSData*) data; + + @end \ No newline at end of file diff --git a/samples/client/petstore/objc/client/NIKFile.m b/samples/client/petstore/objc/client/NIKFile.m new file mode 100644 index 0000000000..b743161a38 --- /dev/null +++ b/samples/client/petstore/objc/client/NIKFile.m @@ -0,0 +1,26 @@ +#import "NIKFile.h" + +@implementation NIKFile + +@synthesize name = _name; +@synthesize mimeType = _mimeType; +@synthesize data = _data; + +- (id) init { + self = [super init]; + return self; +} + +- (id) initWithNameData: (NSString*) filename + mimeType: (NSString*) fileMimeType + data: (NSData*) data { + self = [super init]; + if(self) { + _name = filename; + _mimeType = fileMimeType; + _data = data; + } + return self; +} + +@end \ No newline at end of file diff --git a/samples/client/petstore/objc/client/NIKPetApi.m b/samples/client/petstore/objc/client/NIKPetApi.m index fe47ab3eaa..13dcb816c5 100644 --- a/samples/client/petstore/objc/client/NIKPetApi.m +++ b/samples/client/petstore/objc/client/NIKPetApi.m @@ -1,4 +1,5 @@ #import "NIKPetApi.h" +#import "NIKFile.h" #import "NIKPet.h" @@ -42,7 +43,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"petId", @"}"]] withString: [_api escapeString:petId]]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(petId == nil) { @@ -53,6 +57,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -72,7 +77,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(body != nil && [body isKindOfClass:[NSArray class]]){ @@ -93,6 +101,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; else if([body isKindOfClass:[NSString class]]) { bodyDictionary = body; } + else if([body isKindOfClass: [NIKFile class]]) { + contentType = @"form-data"; + bodyDictionary = body; + } else{ NSLog(@"don't know what to do with %@", body); } @@ -105,6 +117,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -125,7 +138,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(body != nil && [body isKindOfClass:[NSArray class]]){ @@ -146,6 +162,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; else if([body isKindOfClass:[NSString class]]) { bodyDictionary = body; } + else if([body isKindOfClass: [NIKFile class]]) { + contentType = @"form-data"; + bodyDictionary = body; + } else{ NSLog(@"don't know what to do with %@", body); } @@ -158,6 +178,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -178,7 +199,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(status != nil) queryParams[@"status"] = status; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; @@ -191,6 +215,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams: queryParams body: bodyDictionary headerParams: headerParams + contentType: contentType completionBlock: ^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -218,7 +243,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(tags != nil) queryParams[@"tags"] = tags; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; @@ -231,6 +259,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams: queryParams body: bodyDictionary headerParams: headerParams + contentType: contentType completionBlock: ^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -260,6 +289,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"petId", @"}"]] withString: [_api escapeString:petId]]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -271,6 +302,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -304,6 +336,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -337,6 +371,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; @@ -359,6 +394,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -392,6 +429,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; @@ -414,6 +452,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(status != nil) queryParams[@"status"] = status; @@ -427,6 +467,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -460,6 +501,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(tags != nil) queryParams[@"tags"] = tags; @@ -473,6 +516,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; diff --git a/samples/client/petstore/objc/client/NIKStoreApi.m b/samples/client/petstore/objc/client/NIKStoreApi.m index 629a6b7c64..fd9eb5de58 100644 --- a/samples/client/petstore/objc/client/NIKStoreApi.m +++ b/samples/client/petstore/objc/client/NIKStoreApi.m @@ -1,4 +1,5 @@ #import "NIKStoreApi.h" +#import "NIKFile.h" #import "NIKOrder.h" @@ -42,7 +43,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"orderId", @"}"]] withString: [_api escapeString:orderId]]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(orderId == nil) { @@ -53,6 +57,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -73,7 +78,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"orderId", @"}"]] withString: [_api escapeString:orderId]]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(orderId == nil) { @@ -84,6 +92,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -104,7 +113,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(body != nil && [body isKindOfClass:[NSArray class]]){ @@ -125,6 +137,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; else if([body isKindOfClass:[NSString class]]) { bodyDictionary = body; } + else if([body isKindOfClass: [NIKFile class]]) { + contentType = @"form-data"; + bodyDictionary = body; + } else{ NSLog(@"don't know what to do with %@", body); } @@ -137,6 +153,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -159,6 +176,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"orderId", @"}"]] withString: [_api escapeString:orderId]]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -170,6 +189,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -204,6 +224,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"orderId", @"}"]] withString: [_api escapeString:orderId]]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -215,6 +237,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; @@ -237,6 +260,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -270,6 +295,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; diff --git a/samples/client/petstore/objc/client/NIKUserApi.m b/samples/client/petstore/objc/client/NIKUserApi.m index 9817198ef9..0845e0f212 100644 --- a/samples/client/petstore/objc/client/NIKUserApi.m +++ b/samples/client/petstore/objc/client/NIKUserApi.m @@ -1,4 +1,5 @@ #import "NIKUserApi.h" +#import "NIKFile.h" #import "NIKUser.h" @@ -41,7 +42,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(body != nil && [body isKindOfClass:[NSArray class]]){ @@ -62,6 +66,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; else if([body isKindOfClass:[NSString class]]) { bodyDictionary = body; } + else if([body isKindOfClass: [NIKFile class]]) { + contentType = @"form-data"; + bodyDictionary = body; + } else{ NSLog(@"don't know what to do with %@", body); } @@ -74,6 +82,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -94,7 +103,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(body != nil && [body isKindOfClass:[NSArray class]]){ @@ -115,6 +127,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; else if([body isKindOfClass:[NSString class]]) { bodyDictionary = body; } + else if([body isKindOfClass: [NIKFile class]]) { + contentType = @"form-data"; + bodyDictionary = body; + } else{ NSLog(@"don't know what to do with %@", body); } @@ -127,6 +143,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -147,7 +164,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(body != nil && [body isKindOfClass:[NSArray class]]){ @@ -168,6 +188,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; else if([body isKindOfClass:[NSString class]]) { bodyDictionary = body; } + else if([body isKindOfClass: [NIKFile class]]) { + contentType = @"form-data"; + bodyDictionary = body; + } else{ NSLog(@"don't know what to do with %@", body); } @@ -180,6 +204,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -202,7 +227,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [_api escapeString:username]]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(body != nil && [body isKindOfClass:[NSArray class]]){ @@ -223,6 +251,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; else if([body isKindOfClass:[NSString class]]) { bodyDictionary = body; } + else if([body isKindOfClass: [NIKFile class]]) { + contentType = @"form-data"; + bodyDictionary = body; + } else{ NSLog(@"don't know what to do with %@", body); } @@ -238,6 +270,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -259,7 +292,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [_api escapeString:username]]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(username == nil) { @@ -270,6 +306,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -291,7 +328,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [_api escapeString:username]]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; if(username == nil) { @@ -302,6 +342,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -322,7 +363,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(username != nil) queryParams[@"username"] = username; if(password != nil) @@ -340,6 +384,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(nil, error); @@ -360,7 +405,10 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@".json"]; - NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; + NSString* contentType = @"application/json"; + + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; [_api stringWithCompletionBlock:requestUrl @@ -368,6 +416,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -389,6 +438,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -422,6 +473,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; @@ -444,6 +496,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -477,6 +531,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; @@ -499,6 +554,8 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -532,6 +589,7 @@ static NSString * basePath = @"http://petstore.swagger.wordnik.com/api"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; @@ -556,6 +614,8 @@ body:(NIKUser*) body [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [_api escapeString:username]]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -592,6 +652,7 @@ body:(NIKUser*) body queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; @@ -615,6 +676,8 @@ body:(NIKUser*) body [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [_api escapeString:username]]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -626,6 +689,7 @@ body:(NIKUser*) body queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; @@ -649,6 +713,8 @@ body:(NIKUser*) body [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"username", @"}"]] withString: [_api escapeString:username]]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -660,6 +726,7 @@ body:(NIKUser*) body queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -694,6 +761,8 @@ password:(NSString*) password if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; if(username != nil) queryParams[@"username"] = username; @@ -712,6 +781,7 @@ password:(NSString*) password queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(nil, error);return; @@ -745,6 +815,8 @@ password:(NSString*) password if ([requestUrl rangeOfString:@".{format}"].location != NSNotFound) [requestUrl replaceCharactersInRange: [requestUrl rangeOfString:@".{format}"] withString:@""]; + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; NSMutableDictionary* headerParams = [[NSMutableDictionary alloc] init]; id bodyDictionary = nil; @@ -753,6 +825,7 @@ password:(NSString*) password queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { completionBlock(error);return; diff --git a/samples/client/petstore/objc/tests/PetApiTest.m b/samples/client/petstore/objc/tests/PetApiTest.m index 14467e2aa7..2aa8aec2d9 100644 --- a/samples/client/petstore/objc/tests/PetApiTest.m +++ b/samples/client/petstore/objc/tests/PetApiTest.m @@ -1,4 +1,5 @@ #import "PetApiTest.h" +#import "NIKFile.h" @implementation PetApiTest