- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 AFNetworking
2.0。
在 AFNetworking
中,AFHTTPRequestOperationManager
对象有一个 API:
(AFHTTPRequestOperation *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
它接受 NSDictionary 作为我们希望“POST”到服务器的 JSON 负载的参数。在我的有效载荷中,我有以下键值对:
"buttonActionParam":"/catalog/special/international-calling"
发布此负载服务器返回无效的 JSON。查看服务器端的有效载荷,我意识到 AFNetworking 实际上正在发送:
"buttonActionParam":"\/catalog\/special\/international-calling".
我知道 AFNetworking
库使用 NSJSONSerialization
的类方法 -dataWithJSONObject:
,这导致了这个。我的问题是:
问。如何解决这个问题?
最佳答案
这是已知问题。它实际上按设计运行(参见 https://stackoverflow.com/a/20448342/669586)。
有3种可能的解决方案:
让您的服务器知道字符串可以被转义的可能性。一般来说,这是最好的解决方案。
使用不同的 JSON 编码器(例如 SBJson)并将对象编码为 NSData
,而不是使用 AFNetworking 默认序列化器。
使用 NSJSONSerialization
进行编码,然后将结果数据转换为 NSString
(使用 NSUTF8StringEncoding
),对其进行清理并将其转换回来到 NSData
。同样,您必须在将对象提供给 AFNetworking 之前执行此操作。
实现 2 或 3 的最佳方法是在 AFHTTPSessionManager
实例上设置自定义 requestSerializer
。例如,参见 this answer有关实现 3 的示例(注意它是在 Swift 中)。
关于ios - AFNetworking 序列化正斜杠,使 JSON 负载无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33029216/
我是一名优秀的程序员,十分优秀!