在 RestKit 映射它之前访问 JSON 响应
Posted
技术标签:
【中文标题】在 RestKit 映射它之前访问 JSON 响应【英文标题】:Access JSON response before RestKit maps it 【发布时间】:2014-07-31 23:54:25 【问题描述】:我使用的 API 将 )]'
预先添加到每个 JSON 响应中,显然是作为一种安全措施。例如
response.body=)]',
["id":13,"name":"Demo Company","total_amount_due":15714.2]
RestKit 无法映射它,因此我需要在映射之前从响应中删除第一项。
最好的方法是什么?
【问题讨论】:
问题更多在于在 RestKit 尝试映射之前访问响应 这是一项安全措施吗?安全防范什么? 不确定。我自己也觉得很奇怪。 @Wain 这是针对跨站点脚本和其他非法访问模式的措施。通过在不提前知道如何使其有效的情况下使 JSON 无效,未经授权的用户很难解释输入。当然,一旦您看到原始字符串,就很容易解决。但它可以防止很多自动攻击。 【参考方案1】:通过创建MyJsonSerialization
类解决了这个问题:
@interface MyJsonSerialization : NSObject <RKSerialization>
@end
@implementation MyJsonSerialization
+ (id)objectFromData:(NSData *)data error:(NSError **)error
NSString* responseStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *refinedData = data;
if ([responseStr hasPrefix:@")]',"])
NSRange range = NSMakeRange(5, data.length - 5);
refinedData = [data subdataWithRange:range];
id result = [NSJSONSerialization JSONObjectWithData:refinedData options:0 error:error];
return result;
+ (NSData *)dataFromObject:(id)object error:(NSError **)error
return [NSJSONSerialization dataWithJSONObject:object options:0 error:error];
@end
并像这样使用它:
[RKMIMETypeSerialization registerClass:[MyJsonSerialization class] forMIMEType:@"application/json"];
【讨论】:
以上是关于在 RestKit 映射它之前访问 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章
restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)