warum ist RestKit die änderung meiner Antwort content-Typ?
Kurz gesagt: ich versuche, Sie zu Holen Daten aus der server mit der content-type
des http-request-header Satz als @"text/html
.. aber für einige Grund RestKit änderungen, die zu application/JSON
Erklärung:
Wenn ich diesen Wunsch mit nur AFNetworking.. Dinge, die funktionieren wie ein Charme.. dies ist, was mein AFNetworking-code sieht wie folgt aus:
AFHTTPClient *client = [AFHTTPClient alloc] initWithBaseURL:
[NSURL URLWithString:kApiBaseUrl]];
singleton.parameterEncoding = AFJSONParameterEncoding;
[singleton setDefaultHeader:@"Accept" value:@"text/html"];
[client getPath:getPath parameters:nil success:successCallback failure:failureCallback];
Wenn ich das genau die gleiche client - und befestigen Sie es an
MyClient *client = [MyClient getSingleton]; //MyClient is instantiated as above
self.objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
self.objectManager.managedObjectStore = self.managedObjectStore;
//this should have already been done by my client, but putting
//it here just to be sure
[self.objectManager setAcceptHeaderWithMIMEType:@"text/html"];
[[RKObjectManager sharedManager] getObjectsAtPath:kGradesPath
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
//handle success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
//handle failure
}];
den Fehler den ich bekomme, ist:
restkit.network:RKObjectRequestOperation.m:576 Object request failed:
Underlying HTTP request operation failed with error: Error
Domain=org.restkit.RestKit.ErrorDomain Code=-1016 "Expected content type {(
"application/x-www-form-urlencoded",
"application/json"
)}, got text/html" UserInfo=0x8f7acd0
Graben in das Thema ein.. ich legte eine Pause, in managedObjectRequestOperationWithrequest, dann überprüfte ich die acceptableContentTypes von HTTPRequestOperation
erstellt, und es steht null zu null! Also ich gehe davon aus, dass RestKit ist gerade dabei, seinen eigenen Standard akzeptablen content-Typen.. ich weiß nur nicht wo und wie es zu verhindern. Ideen?
p.s. Ich habe keine Kontrolle über den server, so kann ich nicht ändern es ist content-type
header application/JSON
Update:
Es stellt sich heraus, dass in RKObjectRequestOperation.m es wird die mime-type
aus [RKMIMETypeSerialization registeredMIMETypes];
(Linie 354).. und so in RKMIMETypeSerialization.hgibt es noch die Methode:
/**
Registers the given serialization class to handle content for the given MIME Type identifier.
MIME Types may be given as either a string or as a regular expression that matches the MIME Types for which the given serialization should handle. Serializations are searched in the reverse order of their registration. If a registration is made for an already registered MIME Type, the new registration will take precedence.
@param serializationClass The class conforming to the RKSerialization protocol to be registered as handling the given MIME Type.
@param MIMETypeStringOrRegularExpression A string or regular expression specifying the MIME Type(s) that given serialization implementation is to be registered as handling.
*/
+ (void)registerClass:(Class<RKSerialization>)serializationClass forMIMEType:(id)MIMETypeStringOrRegularExpression;
wie kann ich diese registrieren Sie einen text/html
content-type?
Du musst angemeldet sein, um einen Kommentar abzugeben.
RestKit in der Regel erwartet, dass eine einzelne MIMEType (JSON) für die response-Daten. Jedoch, Sie können sagen, es ist mit anderen Arten wie
text/plain
undtext/html
mit der Methode, die Sie gefunden haben und meiner Erfahrung nach ist es schon ziemlich praktisch. Das hinzufügen dieser zu meinem RestKit config (was ich in meiner app-delegate) ermöglicht es mir, zu akzeptieren, sowohlapplication/json
undtext/html
als response-Daten content-Typen.In meinem Fall ist das auch hilfreich, weil Jersey - web-services-framework backend-team in meiner Firma verwendet wird - standardmäßig den content-Typ der leeren Nutzlasten
text/plain
auslöst, scheitern Blöcke, es sei denn, ich habe ausdrücklich registriert, dass MIMEType.Hoffe, das hilft.
Benutze ich ändern const-Wert zu geben, dass erhalten Sie von server api wie diese
wenn die empfangenen text-gleiche Struktur als JSON-dieser Ansatz funktioniert perfekt