У меня есть проект в колбе для получения параметра, и он работает, если я звоню почтальоном.Но если я делаю это с помощью кода Java, он возвращает ошибку 400.
Колба:
@app.route('/predict', methods=["POST"])
def predict():
print("\nPredict......")
print(request.form)
print(request.form['textToPredict'])
print("\nPredict......2")
print(request.form.get("textToPredict"))
#print("Text...."+request.form['textToPredict'].toString())
# new text to predict
text_to_predict = [request.form['textToPredict'].lower()] #[request.form.get('textToPredict')] # ["asmatica desde infancia ex fumante 15 am dopc em uso de o2 ha 1 ano em uso de alenia 400 /12 e formoterol 12 2 x dia mvdiminuido sra brn f 2 t s/s cta rx pfp"] # este deve retornar CID Z00
#print("Text....:"+str(text_to_predict))
# count_vect gera as posições dos vetores de cada palavra do texto.
new = count_vect.transform(text_to_predict)
# carrega o modelo treinado
loaded_model = cPickle.load(open(fname, 'rb'))
# faz a predição do novo texto de entrada
result = loaded_model.predict(new)
print(result)
# accuracy_score(y_test, result)
json_dict = request.get_json()
text = ''.join(result)
textPredicted = text
data = {'textPredicted': textPredicted}
return jsonify(data), 200
Вывод из Java (печатать код FLASK):
Predict......
ImmutableMultiDict([('{"textToPredict":"coriza"}', '')])
127.0.0.1 - - [22/Oct/2018 16:07:34] "POST /predict HTTP/1.1" 400 -
Вывод почтальона (напечатать код FLASK):
Predict......
ImmutableMultiDict([('textToPredict', 'coriza, dificuldade em respirar, febre, dor no corpo')])
coriza, dificuldade em respirar, febre, dor no corpo
Predict......2
coriza, dificuldade em respirar, febre, dor no corpo
['J06 ']
127.0.0.1 - - [22/Oct/2018 16:20:00] "POST /predict HTTP/1.1" 200 -
Java-код:
@POST
// @Path("")
private String predictCid(String predicaoVo) throws IOException {
System.out.print("\nentrou no método predict");
try {
JSONObject jsonParam = new JSONObject();
jsonParam.put("textToPredict", predicaoVo);
String PARAMETROS = "{\ntextToPredict:"+predicaoVo+"\n}";
URL url = new URL("http://127.0.0.1:5000/predict");
HttpURLConnection postConnection = (HttpURLConnection) url.openConnection();
postConnection.setRequestMethod("POST");
postConnection.setRequestProperty("content-Type", "application/x-www-form-urlencoded");
postConnection.setUseCaches(false);
postConnection.setDoInput(true);
postConnection.setDoOutput(true);
// Send POST output.
DataOutputStream printout = new DataOutputStream(postConnection.getOutputStream());
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(printout, "UTF-8"));
System.out.print("\nParametros: "+jsonParam.toString());
writer.write(jsonParam.toString());
writer.flush();
writer.close();
//printout.writeBytes(jsonParam.toString());
//printout.flush();
printout.close();
int responseCode = postConnection.getResponseCode();
System.out.println("POST Response Code : " + responseCode);
System.out.println("POST Response Message : " + postConnection.getResponseMessage());
if (responseCode == HttpURLConnection.HTTP_OK) { // success
BufferedReader in = new BufferedReader(new InputStreamReader(postConnection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// print result
System.out.println(response.toString());
return response.toString();
} else {
System.out.println("POST NOT WORKED");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return "some string just to test"; // just a test
}
Итак, похоже, моя ошибка в отправке сообщения, когда оно сделано из кода Java.
Не могу понять причину ошибки.Мне кажется, что этот параметр неверен при поступлении в колбу из-за выводов, которые он представляет.
Мне нужна помощь в решении этой проблемы.Спасибо.