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/json,application/json,text/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();
}
}