Restkit не соответствует шаблону, когда возвращается ответ

Я видел довольно много сообщений такого рода, где завершающий «/» (или его отсутствие) приводит к сбою сопоставления с образцом.

Моя проблема, однако, заключается в том, что нет шаблона для сопоставления. Моя ошибка выглядит так:

«Нет дескрипторов ответов, соответствующих загруженному ответу». UserInfo=0xcb8a660 {NSErrorFailingURLStringKey=http://domain.herokuapp.com/auth/identity/callback, NSLocalizedFailureReason=Ответ 200 был загружен с URL-адреса 'http://domain.herokuapp.com/auth/identity/callback', которому не удалось сопоставить все (3) дескриптора ответа: http://domain.herokuapp.com pathPattern=(null) statusCodes=200-299> не удалось сопоставить: путь ответа ' /auth/identity/callback' не соответствует шаблону пути '(null)'.

Я предполагаю, что проблема не соответствует шаблону пути «(null)».

Настройка менеджера объектов и HttpClient:

+ (void) fireUpRestkit
{
    RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);

    //base URL @"http://domain.herokuapp.com"
    NSURL *baseURL = [[SCURLManager sharedInstance] baseURL];
    AFHTTPClient * client = [AFHTTPClient clientWithBaseURL:baseURL];

    [client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];

    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
    NSAssert(objectManager, @"objectManager did not instantiate correctly");
}

Мой запрос выглядит так:

[[RKObjectManager sharedManager] postObject:user
                                           path:/auth/identity/callback"
                                     parameters:nil
                                        success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

Мои дескрипторы настроены следующим образом:

    RKObjectManager *objectManager = [RKObjectManager sharedManager];

RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[SCUserEntity class]];
[userMapping addAttributeMappingsFromDictionary:[SCUserEntity keyMapping]];

RKRequestDescriptor * requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping.inverseMapping
                                                                                objectClass:[SCUserEntity class]
                                                                                rootKeyPath:nil
                                                                                     method:RKRequestMethodPOST];

RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userMapping
                                                                                         method:RKRequestMethodGET
                                                                                    pathPattern:nil
                                                                                        keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[objectManager addResponseDescriptor:responseDescriptor];
[objectManager addRequestDescriptor:requestDescriptor];

Я не могу найти причину того, что шаблон, который я даю при выполнении postRequest, кажется, не существует, когда запрос возвращается. Я прошел через методы buildResponseMappingsDictionary и последующих соответствий~. Когда запрос сделан, все они возвращают правильные дескрипторы, но когда запрос требует сопоставления, он не работает.

Я получаю 200 OK от сервера, я вижу тело запроса и ответа, и они кажутся правильными.

Надеюсь, кто-то может помочь мне найти, вероятно, очевидную недостающую часть :)


person RickiG    schedule 09.10.2013    source источник
comment
Какой базовый URL вы установили? Когда вы проходите, какая часть не работает?   -  person Wain    schedule 09.10.2013
comment
Я добавил к вопросу настройку диспетчера объектов и httpclient. Думаю, там ничего особенного. Все работает до тех пор, пока RestKit не попытается сопоставить полученный JSON с UserEntity. Там кажется, что не удается получить responseDescriptor, соответствующий шаблону. Ошибка: не удалось сопоставить: путь ответа '/auth/identity/callback' не соответствует шаблону пути '(null)'., NSLocalizedDescription=Нет дескрипторов ответа, соответствующих загруженному ответу   -  person RickiG    schedule 09.10.2013


Ответы (1)


Это не имеет ничего общего с шаблоном пути. Это метод.

Ты используешь:

[[RKObjectManager sharedManager] postObject:user ...

но у вас есть дескриптор ответа:

method:RKRequestMethodGET

то есть один для POST и один для GET

person Wain    schedule 09.10.2013
comment
Можете ли вы уточнить? Насколько я понимаю, я устанавливаю RKRequestDescriptor, который используется, когда я делаю почтовый запрос с этим объектом, и RKResponseDescriptor, когда я ожидаю получить этот объект обратно из бэкэнда. Я серьезно борюсь с новой версией Restkit 0.20. - person RickiG; 09.10.2013
comment
Измените method:RKRequestMethodGET на method:RKRequestMethodPOST. - person Wain; 09.10.2013
comment
Это помогло мне. Я даже не думал об этом. - person kevin; 12.12.2013