找了一大圈诵肛,發(fā)現(xiàn)國內(nèi)根本沒有解決的方法嗽桩,去國外翻了一遍才找到,記錄一下
重點(diǎn):? bodyEncoding: JSONEncoding.default
1.用moya測試登陸post接口箱玷,發(fā)現(xiàn)傳過去的沒有包裝成json吮龄,百度了好久拷窜,全是千篇一律的答案开皿,stackoverflow上也沒找到,無奈去github的issue上翻篮昧,總算找到附上地址https://github.com/Moya/Moya/issues/1533赋荆。然后總結(jié)下經(jīng)歷,之前以為是header的content-type設(shè)置的問題懊昨,發(fā)現(xiàn)moya4.0更新了一個新的header參數(shù)可以設(shè)置header了窄潭,貌似以前是用一種復(fù)雜的方法設(shè)置的,叫什么endxxx的酵颁,沒仔細(xì)研究那個東西嫉你,反正用不上月帝,用上的時候再說吧,然后把parameter參數(shù)放到了task中幽污,其實剛開始的研究思路主要放在尋找moya中是否有一個屬性能設(shè)置json傳遞嚷辅, .requestCompositeParameters(bodyParameters: parameters, bodyEncoding: JSONEncoding.default, urlParameters: [:]),然后就是這句話距误,主要在于JSONEncoding吧簸搞,這個是task中返回的。然后如果想用以前的parameters的話准潭,可以自己寫一個趁俊,然后把parameters傳遞給bodyParameters就行了。
貼上解決方法
import Moya
let loginProvider = NetworkUtility.getMoyaProvider(LoginAPI.self)
public enum LoginAPI {
? ? case loginUser([String: Any])
? ? case forgotPasswordOTP(String)
? ? case resetPassword([String: Any])
}
extension LoginAPI: TargetType {
? ? public var baseURL: URL { return URL(string: ConfigData.shared.getURL(forKey: DefaultsKeys.baseURL))! }
? ? public var path: String {
? ? ? ? switch self {
? ? ? ? case .loginUser:
? ? ? ? ? ? return ConfigData.shared.getURL(forKey: DefaultsKeys.login)
? ? ? ? case .resetPassword:
? ? ? ? ? ? return ConfigData.shared.getURL(forKey: DefaultsKeys.resetPassword)
? ? ? ? case .forgotPasswordOTP:
? ? ? ? ? ? return ConfigData.shared.getURL(forKey: DefaultsKeys.forgotPasswordOTP)
? ? ? ? }
? ? }
? ? public var method: Moya.Method {
? ? ? ? switch self {
? ? ? ? case .loginUser:
? ? ? ? ? ? return .post
? ? ? ? case .resetPassword, .forgotPasswordOTP:
? ? ? ? ? ? return .put
? ? ? ? }
? ? }
? ? public var task: Task {
? ? ? ? switch self {
? ? ? ? case .loginUser(let bodyParameters),
? ? ? ? ? ? ? //UserLogin dictionaryRepresentation is used for this
?? ? ? ? ? ? .resetPassword(let bodyParameters):
? ? ? ? ? ? return .requestCompositeParameters(bodyParameters: bodyParameters,
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bodyEncoding: JSONEncoding.default,
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? urlParameters: [:])
? ? ? ? case .forgotPasswordOTP(let email):
? ? ? ? ? ? return .requestCompositeParameters(bodyParameters: [User.Keys.email: email],
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bodyEncoding: JSONEncoding.default,
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? urlParameters: [:])
? ? ? ? }
? ? }
? ? public var headers: [String: String]? {
? ? ? ? return NetworkUtility.getHeaders()
? ? }
? ? public var sampleData: Data {
? ? ? ? var data: Data! = nil
? ? ? ? switch self {
? ? ? ? case .loginUser:
? ? ? ? ? ? data = NetworkUtility.loadJSON(jsonName: "3.33.4Success")
? ? ? ? case .resetPassword:
? ? ? ? ? ? data = NetworkUtility.loadJSON(jsonName: "ResetPassword")
? ? ? ? case .forgotPasswordOTP:
? ? ? ? ? ? data = NetworkUtility.loadJSON(jsonName: "VerifyUser")
? ? ? ? }
? ? ? ? return data
? ? }
}