快速4-Alamofire和翻新之间的区别(@Body类)

时间:2019-01-09 12:31:51

标签: swift alamofire

我通过“改造库”(例如alamofire)发送了我的android类,服务器可以解析成功 但是当我使用“ alamofire”时,服务器找不到我的参数,而我却报错了

我认为这是因为我在Java中发送了Body,并且迅速发送了参数,但它不像body

android示例

班级:

public class Car implements Serializable {

@SerializedName("strMobileNumber") //<--- serialize
private String strMobileNumber= "";
@SerializedName("strOfficialIMEI")
private String strOfficialIMEI= "";
// ... geter and setter...

改装终点:

@POST("/Rest/Login") // <== post
Call<Car> getLogin(@Body Car car); //// **<=== @BODY**

请求:

private void postRequest(Car car) {
    ApiService apiService = ApiClient.getClient().create(ApiService.class);
    Call<Car> call = apiService.getLogin(car);
    call.enqueue(new Callback<Car>() {
        @Override
        public void onResponse(Call<Car> call, Response<Car> response) {
            stopLoading();
            if (response.isSuccessful() && response.body() != null) {
                switch (response.body().getResult()) {
                    case "1":
                        //do somrthing
                        break;
                    case "0":
                        //do somrthing
                        break;
                    default:
                        //do somrthing
                        break;
                }
            } else {
                //do somrthing
            }
        }

        @Override
        public void onFailure(Call<Car> call, Throwable t) {
           //do somrthing
        }
    });
}

--------------------------------------------------- -----------------------


我为alamofire尝试了此操作,但服务器无法解析我的参数:

我的班级:

class User: Codable {
    private var strMobileNumber: String
    private var strOfficialIMEI : String

    init(strMobileNumber: String, strOfficialIMEI: String) {
       self.strMobileNumber = strMobileNumber
       self.strOfficialIMEI = strOfficialIMEI
    }

    func toParams () -> [String : Any] {
        return [
            "strMobileNumber" : self.strMobileNumber as Any,
            "strOfficialIMEI" : self.strOfficialIMEI as Any
        ]
    }
}

我的请求

Alamofire.request(Values.connection.url("Login") , method: .post, parameters: params, encoding: URLEncoding.default, headers: ["Content-Type":"applocation/json"]).responseJSON { (response) in
       switch response.result {
       case .success(let json):
           let dict = json as? [String: Any]
           print(dict!["<KEY>"])
           break
       case .failure(let error):
           print(error)
           break
       }
   }

迅捷4.2 alamofire 4.7

2 个答案:

答案 0 :(得分:2)

我认为Alamofire参数编码方法不合适,您可能需要安装URLEncoding.default才能使用JSONEncoding.default

答案 1 :(得分:1)

您需要在API调用中进行两项更改:

  • 将编码方法更改为JSONEncoding.default
  • 将标头值更改为["Content-Type":"application/json"]

URLEncoding.default用于在URL本身中传递数据时使用。如果要在正文中传递数据,则应使用JSONEncoding.default

标题的内容类型也有拼写错误。