Swift Moya отправляет параметры в виде JSON в теле запроса

Вот как выглядит моя конечная точка:

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
        }
    }
}

Теперь я хочу, чтобы мой метод CreateHistoricalEvent публиковал свои параметры как JSON в теле запроса. Что мне не хватает?


person alexxjk    schedule 12.05.2016    source источник


Ответы (1)


В Swift3

Изменить:

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

Кому:

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

Если вы хотите отправлять данные с помощью JsonArray, попробуйте:

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
    }

}

и

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