iOS客戶端 與JAVA 後臺http通信

ios 客戶端和java 後臺數據交互時一些注意點吧 設置的請求頭信息,以及接收體可接受的類型,長度

// manager  

    AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];

   

    // 設置請求頭信息,不設置可能會出現數據交互失敗

    AFHTTPRequestSerializer * requestSer = [AFHTTPRequestSerializer serializer];

    [requestSer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

    [manager setRequestSerializer:requestSer];


    //設置返回體信息,eg:設置可接收的ContentType(如果不能確定,就置空 nil

    // 不設置可能會出現 3840(JSON text did not start with array or object and option to allow fragments not set.)

    [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]] ;

    manager.responseSerializer.acceptableContentTypes = nil;

//    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];

    

    // 發起請求

    [manager POST:path parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        if ([responseObject isKindOfClass:[NSData class]]) {

            NSString * res = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

            NSLog(@"====%@", res);

            complete(responseObject);

        }

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        NSLog(@"error.code = %ld userinfo = %@", (long)error.code, error.userInfo);

        NSLog(@"====%@-- %lld -- %@", task.response.MIMEType,task.response.expectedContentLength,task.response.textEncodingName);

        [task cancel];

    }];



/*

出現 -1016

     

     在進行網絡請求時出現-1016 是因爲只支持

     text/jsonapplication/jsontext/javascript

     你可以添加text/html   如果不能確定,就置空 nil

     manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json",nil];

     

     出現 3840

     

     Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" 

     (JSON text did not start with array or object and option to allow fragments not set.)

     沒有設置requestSerializer 或者  responseSerializer

     manager.requestSerializer = [AFHTTPRequestSerializer serializer];

     manager.responseSerializer = [AFHTTPResponseSerializer serializer];


    1xx - 信息提示

    2xx - 成功

    3xx - 重定向

    4xx - 客戶端錯誤*

    5xx - 服務器端錯誤

     */

Java 部分,前提是其他環境正常運行的情況下

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("APP的請求到這裏了");

// response.sendError(1111); // 這是可以發送到客戶端的 一般是有error

response.setCharacterEncoding("UTF-8");

// response.setContentLength(1000000);

response.setContentType("application/json; charset=utf-8");

//這是測試,模擬的json 數據,實際開發需要用到轉json

String jsonStr = "{\"name\":\"fly\",\"type\":\"蟲子\"}";

  PrintWriter out = null;

try {

    out = response.getWriter();

    out.write(jsonStr);

} catch (IOException e) {

    e.printStackTrace();

} finally {

    if (out != null)

        out.close();

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章