• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何为带有可选 URL 参数的 GET 请求映射不同的 JSON 响应

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:13:13 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我需要使用可选的 URL 参数对 url 执行 GET 请求。

基本 URL 类似于 http://host/user/explore,可以选择查询 http://host/user/explore?who=VALUE&category=VALUE&service= VALUE 以获得更准确的结果。

对于第一种情况,响应带有根键,例如:

{
  "professionals": [
    {
        "_id": "59e8576cb524cf44a435844b"
    }
   ],
 "salons": [
    {
        "_id": "59e857bbb524cf44a4358454"
    }
   ]
}

而且我可以通过设置我的响应描述符来成功映射响应,例如:

RKResponseDescriptor *response = [RKResponseDescriptor
                                  responseDescriptorWithMapping:[Explore map1]
                                  method:RKRequestMethodGET
                                  pathPattern"user/explore"
                                  keyPath:nil                    
       statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
return response;

(请注意,[Explore map1] 用于映射“Professional”的 NSArray 和另一个由“Salon”NSObjects 组成的 NSArray)

但是,当我查询 http://host/user/explore?who=VALUE&category=VALUE&service=VALUE 时,我的响应 JSON 变为:

{
  "_id": "59f6f9fc36e51720da2e85f4"
},
{
  "_id": "92x2f9fc36e51720da2e66d5"
}

实际返回的对象都是相同的类型(并且不再在根处有键)。

所以现在很明显,我的 RKResponseDescriptorRKObjectMapping 未能正确处理这种情况。

我已经研究过使用 RKDynamicMappingRKRoute 并且无法真正了解它们的工作原理,或者它们是否适用于我的情况...



Best Answer-推荐答案


你的网址是:http://host/user/explore?who=VALUE&category=VALUE&service=VALUE 所以就这样做吧:

    let postMapping: RKObjectMapping = RKObjectMapping(for: GetFoo.self)
    postMapping.addAttributeMappings(from:["who","category","service"])

    // Define response decriptor

    let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClass.successful)
    let resDescriptor = RKResponseDescriptor(mapping: postMapping, method: RKRequestMethod.GET, pathPattern: "user/explore", keyPath: nil, statusCodes: statusCodes)

    // Create object manager

    let url = URL(string: "http://host")

    let jsonPlaceholderManager = RKObjectManager(baseURL: url)
    jsonPlaceholderManager?.addResponseDescriptor(resDescriptor)
    RKObjectManager.setShared(jsonPlaceholderManager)

    RKObjectManager.shared().getObjectsAtPath("/user/explore?who=VALUE&category=VALUE&service=VALUE", parameters: nil, success: { (operation, mappingResult) -> Void in

        let dataResponse = operation?.httpRequestOperation.responseData
        let jsonData = try? JSONSerialization.jsonObject(with: dataResponse!, options: .mutableContainers) as? NSMutableDictionary
        print(dataResponse)

关于ios - 如何为带有可选 URL 参数的 GET 请求映射不同的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148874/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap