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();
}
}