2016-05-12 7 views
2

Senden Dies ist, wie mein Endpoint aussieht:Swift Moya Parameter als JSON in Anforderungstext

extension MyEndpoint: TargetType { 
    var baseURL: NSURL { return NSURL(string: "http://10.0.1.13:5000")! } 
    var path: String { 
     switch self { 
     case .SearchForNodes(_, _, _): 
      return "/api/search/node/" 
     case .CreateHistoricalEvent(_): 
      return "/api/node/historicalevent/" 
     } 
    } 
    var method: Moya.Method { 
     switch self { 
     case .SearchForNodes(_, _, _): 
      return .GET 
     case .CreateHistoricalEvent(_): 
      return .POST 
     } 
    } 
    var parameters: [String: AnyObject]? { 
     switch self { 
     case .SearchForNodes(let startsWith, let page, let pageSize): 
      return ["startsWith": startsWith, "page": page, "pageSize": pageSize] 
     case .CreateHistoricalEvent(let title): 
      return ["Title": title] 
     } 
    } 

    var parameterEncoding: Moya.ParameterEncoding { 
     switch self { 
     case .CreateHistoricalEvent: 
      return ParameterEncoding.Json 
     default: 
      return ParameterEncoding.URL 
     } 
    } 
} 

Jetzt möchte ich meine CreateHistoricalEvent Methode, um seine Parameter als JSON in Anforderungstext zu schreiben. Was vermisse ich?

Antwort

0
extension MoyaProvider { 
    public class func JSONEndpointMapping(target: Target) -> Endpoint<Target> { 

     let url = target.baseURL.URLByAppendingPathComponent(target.path).absoluteString 

     return Endpoint(
      URL: url, 
      sampleResponseClosure: { 
       .NetworkResponse(200, target.sampleData) 
      }, 
      method: target.method, 
      parameters: target.parameters, 
      parameterEncoding: Moya.ParameterEncoding.JSON 
     ) 
    } 
} 

let DemoAPI = MoyaProvider<DemoTarger>(endpointClosure: MoyaProvider.JSONEndpointMapping) 
3

In swift3

ändern:

var parameterEncoding: Moya.ParameterEncoding { 
     switch self { 
     case .CreateHistoricalEvent: 
      return ParameterEncoding.Json 
     default: 
      return ParameterEncoding.URL 
     } 
    } 

Um:

var parameterEncoding: Moya.ParameterEncoding { 
     return JSONEncoding.default 
    } 

Wenn Sie Daten mit Js senden onArray, versuchen Sie es:

import Alamofire 
struct JsonArrayEncoding: Moya.ParameterEncoding { 

    public static var `default`: JsonArrayEncoding { return JsonArrayEncoding() } 


    /// Creates a URL request by encoding parameters and applying them onto an existing request. 
    /// 
    /// - parameter urlRequest: The request to have parameters applied. 
    /// - parameter parameters: The parameters to apply. 
    /// 
    /// - throws: An `AFError.parameterEncodingFailed` error if encoding fails. 
    /// 
    /// - returns: The encoded request. 
    public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { 
     var req = try urlRequest.asURLRequest() 
     let json = try JSONSerialization.data(withJSONObject: parameters!["jsonArray"]!, options: JSONSerialization.WritingOptions.prettyPrinted) 
     req.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 
     req.httpBody = json 
     return req 
    } 

} 

und

var parameterEncoding: Moya.ParameterEncoding { 
     switch self { 
     case .CreateHistoricalEvent: 
      return JsonArrayEncoding.default 
     default: 
      return JSONEncoding.default 
     } 
    }