iOS客户端 与JAVA 后台http通信

来源:互联网 发布:系统矩阵不可逆 编辑:程序博客网 时间:2024/05/30 04:25

ios 客户端和java 后台数据交互时一些注意点吧 设置的请求头信息,以及接收体可接受的类型,长度

// manager  

    AFHTTPSessionManager * manager = [AFHTTPSessionManagermanager];

   

    // 设置请求头信息,不设置可能会出现数据交互失败

    AFHTTPRequestSerializer * requestSer = [AFHTTPRequestSerializerserializer];

    [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:[AFHTTPResponseSerializerserializer]] ;

    manager.responseSerializer.acceptableContentTypes =nil;

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

    

    // 发起请求

    [manager POST:pathparameters:nilprogress:nilsuccess:^(NSURLSessionDataTask *_Nonnull task, id _Nullable responseObject) {

        if ([responseObjectisKindOfClass:[NSDataclass]]) {

            NSString * res = [[NSStringalloc] initWithData:responseObjectencoding: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 部分,前提是其他环境正常运行的情况下

protectedvoid 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

StringjsonStr = "{\"name\":\"fly\",\"type\":\"虫子\"}";

  PrintWriterout =null;

try {

    out =response.getWriter();

    out.write(jsonStr);

} catch (IOException e) {

    e.printStackTrace();

}finally {

    if (out !=null)

        out.close();

}

}


0 0
原创粉丝点击