2016-02-14 3 views
-1

Я пытаюсь отправить некоторые данные из моего приложения Android на свой сервер, на котором запущен некоторый код фляжки. Я использую HTTPUrlConnection, чтобы сделать запрос POST на сервер Flask. Я смог создать REST API с помощью Flask, но я не уверен, почему моя связь Java с Python не работает. Я получаю следующее сообщение об ошибке "POST /signUp HTTP/1.1" 400 - с сервера, из которого я не мог получить много (отладка включена в Flask). Как я должен передавать данные JSON на свой сервер и как должен интерпретировать этот код Flask?Java/Flask POST-запрос

Мой Java-код:

 URL url = new URL(url); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Content-Type", "application/json"); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 

     OutputStream stream = connection.getOutputStream(); 
     writer = new DataOutputStream(stream); 

     Log.d("WARN", getQuery(params)); 
     // The LogCat prints out data like: 
     // ID:test,Email:[email protected],Pwd:test 

     writer.writeBytes(getQuery(params)); 
     writer.flush(); 
     writer.close(); 
     stream.close(); 

// getQuery function aims to create a JSON string to send to the Flask server. 
private String getQuery(List<Pair<String, String>> params) 
{ 
    StringBuilder result = new StringBuilder(); 
    boolean first = true; 

    for (Pair<String, String> pair : params) 
    { 
     if (first) 
      first = false; 
     else 
      result.append(","); 

     result.append(pair.first); 
     result.append(":"); 
     result.append(pair.second); 
    } 

    return result.toString(); 
} 

Мой серверный код:

@app.route("/signUp", methods=['POST']) 
def signUp(): 
    req_json = request.get_json() 
    g.cursor.execute("INSERT INTO test (ID, Email, Pwd) VALUES (%s,%s,%s)", (req_json['ID'], req_json['Email'], req_json['Pwd'])) 
    g.conn.commit() 
    resp = Response("Updated", status=201, mimetype='application/json') 
    return resp 

ответ

0
// The LogCat prints out data like: 
// ID:test,Email:[email protected],Pwd:test 

Это не строка JSON, поэтому на стороне сервера колба не будет быть в состоянии десериализовать его. Вы JSON должны выглядеть следующим образом:

// {"ID":"test","Email":"[email protected]","Pwd":"test"} 

Кстати, вместо того, чтобы иметь дело с низкоуровневыми строковыми сцеплениями при генерации JSON строки, вы можете использовать некоторые более высокий уровень свободно API-s для генерации JSON, как джексон или org.json API.

+0

Благодарим за помощь. Я смог использовать «Google GSON» для сериализации объекта и передачи его в код Python. – Black