我是Restkit的新手,但到目前为止,对我来说,使用版本0.20.3可以很好地满足我的大部分网络需求。
我正在使用WCF webhttp绑定在c#中编写基于json的API,值得一提的是,我完全无法控制此API并且无法更改返回的json的格式,我需要使用我的工作有
问题是,当API返回一个简单的类型,如int,double或string作为响应时,json响应完全裸露,如下所示。
字符串响应
"hello world"
int response
2342524
这两个示例响应都具有application / json的内容类型
我曾尝试使用带有restkit的API端点,该端点通过客户编号获取客户订单的数量。 请求的代码如下,我希望NSNumber作为响应,但它生成一个错误,因为它是一个原始的解包类型,我无法为此提供映射。
[manager getObject:nil
path:@"/service/http/CountOrders?CustomerId=324534413"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){
RKLogInfo(@"order count: %@",mappingResult);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
RKLogError(@"Operation failed with error: %@", error);
}];
我得到的错误是
restkit.network:RKResponseMapperOperation.m:317 Failed to parse response data: Loaded an unprocessable response (200) with content type 'application/json'
restkit.network:RKObjectRequestOperation.m:213 GET 'http://CUSTOMERDOMAIN/service/http/CountOrders?CustomerId=324534413'
(200 OK / 0 objects)
[request=0.2263s mapping=0.0000s total=0.2386s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1017 "Loaded an unprocessable response (200) with content type 'application/json'"
UserInfo=0x8e1a660 {NSErrorFailingURLKey=http://CUSTOMERDOMAIN/service/http/CountOrders?CustomerId=324534413, NSUnderlyingError=0x8e1b1a0
"The operation couldn’t be completed. (Cocoa error 3840.)",
NSLocalizedDescription=Loaded an unprocessable response (200) with content type 'application/json'}
hj
有没有办法解析对NSNumber的响应来覆盖这个边缘情况? 我认为自定义反序列化处理程序可能是最好的方法,但正如我所说,我是restkit的新手,我基本上正在寻找正确的方向。
答案 0 :(得分:0)
自定义序列化程序可以工作,但一个简单的方法可能是跳过RestKit来处理带有“简单”响应的请求,而是使用底层的AFNetworking类。然后您不必担心序列化,您可以快速强制响应值。