Как обрабатывать типы MIMET с множественными ответами с помощью Restkit 0.20

У меня есть приложение для iOS, использующее Restkit. Большинство тел ответов с сервера имеют формат XML. Однако есть несколько API, которые отправляют ответ типа «Успех» только в текстовом / простом формате. При вызове этих API я получаю ответ 200, но restkit выдаст ошибку сопоставления, потому что ожидает Content-Type = application/xml, как показано в ошибке ниже.

NSLocalizedDescription=Loaded an unprocessable response (200) with content type 'application/xml'} response.body=success

Я использую класс RKXMLReaderSerialization для интерпретации XML, полученного от сервера, и именно так я его регистрирую.

[RKMIMETypeSerialization registerClass:[RKXMLReaderSerialization class] forMIMEType:@"application/xml"];

Судя по документации, вы можете зарегистрировать несколько типов MIMETypes, но я не смог понять, как это сделать. Если это возможно, кто-нибудь может указать мне на это. Если нет, есть ли способ справиться с этим?

ОБНОВЛЕНИЕ / РЕШЕНИЕ

После дальнейших исследований и помощи от Wain я обнаружил, что указанная выше ошибка фактически указывает на то, что response-header для content-type имеет значение application/xml. Этот ресткит с ключами пытается сопоставить response.body как application/xml отформатированное тело. С response.body, содержащим только слово «успех», ответ не удалось обработать. В итоге я указал на это своему серверу, и он исправил ответ, чтобы он был отформатирован в MIMEType, объявленном заголовком Accept, отправленным с запросом.


person Ben    schedule 16.07.2013    source источник


Ответы (1)


Вы можете позвонить setAcceptHeaderWithMIMEType: на свой RKObjectManager, чтобы сообщить ему, какие типы mime приемлемы в ответе. Возможно, вам также потребуется определить и зарегистрировать свой собственный класс сериализации, чтобы RestKit мог выполнять весь рабочий процесс сопоставления без ошибок.

person Wain    schedule 16.07.2013
comment
Спасибо, Wain, я знаю, что в настоящее время использую setAcceptHeaderWithMIMEType:. Вчера вечером мне не удалось исследовать его, потому что я предположил, что он использовался для установки заголовка Accept для запроса. Я изучу это сегодня вечером. Случайно знаете ли вы, как установить более одного? I.E. что-то вроде этого setAcceptHeaderWithMIMEType: someMIMEType, someOtherMIMEType или требуется setAcceptHeaderWithMIMEType: someMIMEType новая строка кода setAcceptHeaderWithMIMEType: someOtherMIMEType? - person Ben; 16.07.2013
comment
Он используется для заголовка подтверждения запроса: т.е. Какие типы ответов я могу принять для этого запроса. Я считаю, что это аддитивно, поэтому каждый раз, когда вы его называете, тип ответа добавляется в список приемлемых вариантов. - person Wain; 16.07.2013
comment
В этом случае мне может потребоваться поговорить с моим серверным парнем. Я уже отправляю заголовок accept как application / xml. Я продолжу исследовать это сегодня вечером - person Ben; 16.07.2013
comment
Все, что требуется RestKit, - это чтобы сервер отвечал в формате, который ваш код считает приемлемым. Все остальное вызовет ошибку, которую вы видите. - person Wain; 16.07.2013
comment
Пятно как обычно на Wain! Ваш последний комментарий помог мне понять истинную проблему, с которой я столкнулся. Дело не в том, что мне нужно было зарегистрировать еще MIMEType, дело в том, что заголовок ответа от сервера объявил тип содержимого application/xml, хотя на самом деле он был text/plain. Я указал на это своему серверу, и он изменил ответ, чтобы он был отформатирован в content-type, объявленном заголовком Accept. - person Ben; 17.07.2013