Json 如何使用;addAttributeMappings“;在RestKit中?
我的json响应不仅包含字符串,还包含DTO数组。对象映射的格式不正确 json响应主体: 下面给出的是我的实体模型。(请注意,dynamicTableDetailDTOList是DTO的数组): 在我的ViewController中,调用回调方法, 在LoanDetailService类中,实现了与服务调用相关的所有代码:Json 如何使用;addAttributeMappings“;在RestKit中?,json,restkit,dto,addattribute,rkobjectmapping,Json,Restkit,Dto,Addattribute,Rkobjectmapping,我的json响应不仅包含字符串,还包含DTO数组。对象映射的格式不正确 json响应主体: 下面给出的是我的实体模型。(请注意,dynamicTableDetailDTOList是DTO的数组): 在我的ViewController中,调用回调方法, 在LoanDetailService类中,实现了与服务调用相关的所有代码: 如何更改实体模型?以下内容解决了我的问题: 在LoanDetailServiceClass中 func getLoanDetails(success: @escaping(
如何更改实体模型?以下内容解决了我的问题: 在LoanDetailServiceClass中
func getLoanDetails(success: @escaping((_ loanDetailModel: LoanDetailModel?) -> ()),
failure: @escaping ((_ error:String) -> ())) {
// Define mappings
let postMapping: RKObjectMapping = RKObjectMapping(for: LoanDetailModel.self)
postMapping.addAttributeMappings(from: ["id","componentName"])
let dTOListMapping: RKObjectMapping = RKObjectMapping(for: DynamicTableDetailDTOList.self)
dTOListMapping.addAttributeMappings(from: ["fieldName",
"fieldType",
"label"])
postMapping.addRelationshipMapping(withSourceKeyPath: "DynamicTableDetailDTOList" ,
mapping: dTOListMapping)
// Define response decriptor
let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClass.successful)
let resDescriptor = RKResponseDescriptor(mapping: postMapping, method: RKRequestMethod.GET, pathPattern: nil, keyPath: nil, statusCodes: statusCodes)
// Create object manager
let url = URL(string: baseURL)
let jsonPlaceholderManager = RKObjectManager(baseURL: url)
jsonPlaceholderManager?.addResponseDescriptor(resDescriptor)
RKObjectManager.setShared(jsonPlaceholderManager)
// Perform GET request
RKObjectManager.shared().getObjectsAtPath(appendedURL, parameters: nil, success: { (operation, mappingResult) -> Void in
let loanDetailModel: LoanDetailModel = mappingResult!.firstObject as! LoanDetailModel
success(loanDetailModel)
}) { (operation, error) -> Void in
failure((error?.localizedDescription)!)
}
}
class LoanDetailModel: NSObject {
var id:Any?
var componentName = ""
var dynamicTableDetailDTOList:[DynamicTableDetailDTOList] = []
}
class DynamicTableDetailDTOList: NSObject {
var id:Int?
var fieldName:String = ""
var fieldType:String = ""
var isJoin:Bool?
var length:Int?
var label:String = ""
var isrequired:Bool?
var searchable:Bool?
}
override func viewDidLoad() {
super.viewDidLoad()
let loanDetailService = LoanDetailService()
loanDetailService.getLoanDetails(success: { (model) in
self.loanDetailModel = model!
self.loanDetailTable.reloadData()
})
{ (errorString) in
let alert = UIAlertController(title: "Alert",
message: errorString,
preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
func getLoanDetails(success: @escaping((_ loanDetailModel: LoanDetailModel?) -> ()),
failure: @escaping ((_ error:String) -> ())) {
// Define mappings
let postMapping: RKObjectMapping = RKObjectMapping(for: LoanDetailModel.self)
postMapping.addAttributeMappings(from: ["id", "componentName", "dynamicTableDetailDTOList"])
// Define response decriptor
let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClass.successful)
let resDescriptor = RKResponseDescriptor(mapping: postMapping, method: RKRequestMethod.GET, pathPattern: nil, keyPath: nil, statusCodes: statusCodes)
// Create object manager
let url = URL(string: baseURL)
let jsonPlaceholderManager = RKObjectManager(baseURL: url)
jsonPlaceholderManager?.addResponseDescriptor(resDescriptor)
RKObjectManager.setShared(jsonPlaceholderManager)
// Perform GET request
RKObjectManager.shared().getObjectsAtPath(appendedURL, parameters: nil, success: { (operation, mappingResult) -> Void in
let loanDetailModel: LoanDetailModel = mappingResult!.firstObject as! LoanDetailModel
success(loanDetailModel)
}) { (operation, error) -> Void in
failure((error?.localizedDescription)!)
}
}
func getLoanDetails(success: @escaping((_ loanDetailModel: LoanDetailModel?) -> ()),
failure: @escaping ((_ error:String) -> ())) {
// Define mappings
let postMapping: RKObjectMapping = RKObjectMapping(for: LoanDetailModel.self)
postMapping.addAttributeMappings(from: ["id","componentName"])
let dTOListMapping: RKObjectMapping = RKObjectMapping(for: DynamicTableDetailDTOList.self)
dTOListMapping.addAttributeMappings(from: ["fieldName",
"fieldType",
"label"])
postMapping.addRelationshipMapping(withSourceKeyPath: "DynamicTableDetailDTOList" ,
mapping: dTOListMapping)
// Define response decriptor
let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClass.successful)
let resDescriptor = RKResponseDescriptor(mapping: postMapping, method: RKRequestMethod.GET, pathPattern: nil, keyPath: nil, statusCodes: statusCodes)
// Create object manager
let url = URL(string: baseURL)
let jsonPlaceholderManager = RKObjectManager(baseURL: url)
jsonPlaceholderManager?.addResponseDescriptor(resDescriptor)
RKObjectManager.setShared(jsonPlaceholderManager)
// Perform GET request
RKObjectManager.shared().getObjectsAtPath(appendedURL, parameters: nil, success: { (operation, mappingResult) -> Void in
let loanDetailModel: LoanDetailModel = mappingResult!.firstObject as! LoanDetailModel
success(loanDetailModel)
}) { (operation, error) -> Void in
failure((error?.localizedDescription)!)
}
}