Как использовать под словарь в мантии с пальто?

Я решил использовать Mantle для использования некоторых конечных точек JSON, но структура JSON различается в зависимости от того, GETили POSTв обьекте Возьмем конечную точку пользователя, например:

При запросе пользователя вы получаете ответ, подобный следующему:

{
    "random_meta_data": "whatever",
    "etc.": "etc.",
    "payload": {
        "username": "username",
        "email": "username@email.com",
        "etc.": "etc."
    }
}

При создании пользователя вам нужно отправить что-то вроде этого:

{
    "username": "username",
    "email": "username@email.com",
    "etc.": "etc."
}

Это не сложная проблема, но кажется достаточно распространенной Mantle должен быть в состоянии решить это за вас.

Я знаю, что могу просто инициализировать модель мантии с dictionary[@"payload"], но Overcoat выполняет сопоставление для меня автоматически, и если я собираюсь сделать это вручную, я не пользуюсь Overcoat больше.

Поэтому мне интересно, есть ли стандартный способ решения этой проблемы с Mantle и / или Overcoat?

1 ответ

То, что вы описываете, называется ответом в конверте, и вы можете прочитать о том, как обращаться с теми, кто в Overcoat README.md:

https://github.com/Overcoat/Overcoat

Другие сервисы, такие как App.net, используют конвертный ответ, который представляет собой ответ JSON верхнего уровня, содержащий запрошенные данные и дополнительные метаданные. Для этих видов услуг вы должны создать свой собственный подкласс OVCResponse и указать путь к ключу данных.

@interface AppDotNetResponse : OVCResponse
...
@end

@implementation AppDotNetResponse
+ (NSString *)resultKeyPathForJSONDictionary:(NSDictionary *)JSONDictionary 
{
    return @"data";
}
@end

Затем вы можете указать, какой класс ответа использовать в вашем клиенте, переопределив +responseClass.

+ (Class)responseClass {
    return [AppDotNetResponse class];
}
Другие вопросы по тегам