AFNetworking 2.0发布效果不佳

时间:2015-02-02 02:09:37

标签: json flask afnetworking-2

我使用AFNetworking将一些JSON数据发布到服务器,服务器将使用相同的JSON数据进行响应。

这是objc代码:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager POST:@"http://127.0.0.1:5000/test" parameters:@{@"value":@(1)} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON:%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"%@",error);
}];

服务器代码(使用Flask):

@app.route('/test', methods = ['POST'])
def test():
    resultJson = json.dumps(request.json)
    response = make_response(resultJson)
    return response

我运行代码,发生错误:

  

错误Domain = com.alamofire.error.serialization.response Code = -1016“请求失败:不可接受的内容类型:text / html”UserInfo = 0x7febc2d33560 {com.alamofire.serialization.response.error.response = {URL :http://127.0.0.1:5000/test} {状态代码:200,headers {           “内容长度”= 12;           “Content-Type”=“text / html; charset = utf-8”;           Date =“Mon,02 Feb 2015 01:10:55 GMT”;           Server =“Werkzeug / 0.9.6 Python / 2.7.6”;       },NSErrorFailingURLKey = http://127.0.0.1:5000/test,com.alamofire.serialization.response.error.data =< 7b227661 6c756522 3a20317d>,NSLocalizedDescription =请求失败:不可接受的内容类型:text / html}

我无法理解为什么状态代码为200,因为存在错误,以及为什么错误消息显示Content-Type是text / html,我在Objective-C中将Content-Type设置为application / json上面的代码。

但是,当我使用VisualJSON(Mac应用程序)时,情况会很好。

1 个答案:

答案 0 :(得分:0)

您将JSON数据作为响应返回,但您设置Content-Type的假设不正确。创建一个mimetype设置为' application / json'。

的响应实例
from flask import request, json

@app.route('/test', methods=['POST'])
def test():
    data = json.dumps(request.get_json())
    resp = app.response_class(data, mimetype='application/json')
    return resp