How to set header values ​​in Restkit

I am trying to set header values ​​for my restkit calls. However, it does not seem to work.

I want to set the Content-Type and Accept headers to application/json

Any idea what the problem is?

Thanks!

 RKObjectManager *objectManager = [RKObjectManager sharedManager]; [[objectManager client] setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [[objectManager client] setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; RKURL *URL = [RKURL URLWithBaseURL:[objectManager baseURL] resourcePath:@"/users/sign_in.json" queryParameters:params]; [objectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"%@?%@", [URL resourcePath], [URL query]] delegate:self]; 
+4
source share
3 answers

I do not think this is too obvious, although it is in the documentation (and I have not tried tbh), but there is serializationMIMEType in the object manager. There is also defined a constant for JSON, so your code will probably look like this:

 objectManager.serializationMIMEType = RKMIMETypeJSON; 

According to the docs, the / json application is the default value for Accept anyway, but can be specified with the acceptMIMEType property.

+9
source

You have this option

 [kGlobalObjectManager() loadObjectsAtResourcePath: @"path" usingBlock: ^(RKObjectLoader *loader) { NSDictionary* dictionary = [NSDictionary dictionaryWithObject: @"VALUE" forKey: @"HEADER NAME"]; loader.additionalHTTPHeaders = dictionary; loader.delegate = self; }]; 

More specifically for your problem, you have [RKObjectManager setAcceptMIMEType:]

+3
source

There is a method in the RKObjectManager class

 ** This method is the `RKObjectManager` analog for the method of the same name on `AFHTTPClient`. */ - (NSMutableURLRequest *)requestWithMethod:(NSString *)method path:(NSString *)path parameters:(NSDictionary *)parameters { NSMutableURLRequest* request; if (parameters && !([method isEqualToString:@"GET"] || [method isEqualToString:@"HEAD"] || [method isEqualToString:@"DELETE"])) { // NOTE: If the HTTP client has been subclasses, then the developer may be trying to perform signing on the request NSDictionary *parametersForClient = [self.HTTPClient isMemberOfClass:[AFHTTPClient class]] ? nil : parameters; request = [self.HTTPClient requestWithMethod:method path:path parameters:parametersForClient]; NSError *error = nil; NSString *charset = (__bridge NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.HTTPClient.stringEncoding)); [request setValue:[NSString stringWithFormat:@"%@; charset=%@", self.requestSerializationMIMEType, charset] forHTTPHeaderField:@"Content-Type"]; NSData *requestBody = [RKMIMETypeSerialization dataFromObject:parameters MIMEType:self.requestSerializationMIMEType error:&error]; [request setHTTPBody:requestBody]; } else { request = [self.HTTPClient requestWithMethod:method path:path parameters:parameters]; } return request; } 

There is a content type replacement here that you can install earlier when you set up RestKit

 [[[RKObjectManager sharedManager] HTTPClient] setDefaultHeader:@"Content-Type" value:@"application/json"]; 

For this, I will find (not very, but working) a solution, I made a category

 @interface RKObjectManager (BBContentType) - (NSMutableURLRequest *)requestWithMethod:(NSString *)method path:(NSString *)path parameters:(NSDictionary *)parameters; @end @implementation RKObjectManager (BBContentType) - (NSMutableURLRequest *)requestWithMethod:(NSString *)method path:(NSString *)path parameters:(NSDictionary *)parameters { NSMutableURLRequest* request; if (parameters && !([method isEqualToString:@"GET"] || [method isEqualToString:@"HEAD"] || [method isEqualToString:@"DELETE"])) { // NOTE: If the HTTP client has been subclasses, then the developer may be trying to perform signing on the request NSDictionary *parametersForClient = [self.HTTPClient isMemberOfClass:[AFHTTPClient class]] ? nil : parameters; request = [self.HTTPClient requestWithMethod:method path:path parameters:parametersForClient]; NSError *error = nil; NSData *requestBody = [RKMIMETypeSerialization dataFromObject:parameters MIMEType:self.requestSerializationMIMEType error:&error]; [request setHTTPBody:requestBody]; } else { request = [self.HTTPClient requestWithMethod:method path:path parameters:parameters]; } return request; } @end 

I just cut two lines

 NSString *charset = (__bridge NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.HTTPClient.stringEncoding)); [request setValue:[NSString stringWithFormat:@"%@; charset=%@", self.requestSerializationMIMEType, charset] forHTTPHeaderField:@"Content-Type"]; 
0
source

All Articles