JSON 형식의 메시지를 생성하고 Tomcat 서버로 보내는 안드로이드 장치가 있습니다. 서버에서이 JSON 형식의 메시지를 수신 한 Java Web Application을 실행하고 있습니다.안드로이드 장치에서 서버로 JSON 메시지 보내기
내 문제는 서버에서 메시지를 받으면 서버가 특정 문자 ('{', '[', ' "' '' ''} ')를 16 진수 표시 서버가 메시지를 인식하지 못하는 JSON 오류가 발생합니다.
제 질문은이 문제를 일으키는 원인을 알 수 있는지 여부와이 문제를 해결하는 방법을 알고 있는지 여부입니다. JSON 코드가 아니라고 확신합니다. 오히려 방법 메시지)/전송되는 측면에서 처리 수신 여기
내 서버 측 코드입니다.@Override
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Setup response
PrintWriter out = response.getWriter();
// Store input message as String
StringBuilder sb = new StringBuilder();
String message;
// Build String
while ((message = request.getReader().readLine()) != null) {
sb.append(message);
}
// Full message as String
message = sb.toString();
// Convert message to JSON format
Gson gson = new Gson();
ImageFeatures features = gson.fromJson(message, ImageFeatures.class);
out.println("Normal data: " + features);
out.println();
}
여기
내가 수신하고있는 오류입니다 :
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 12
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
com.google.gson.Gson.fromJson(Gson.java:795)
com.google.gson.Gson.fromJson(Gson.java:761)
com.google.gson.Gson.fromJson(Gson.java:710)
com.google.gson.Gson.fromJson(Gson.java:682)
이 안드로이드 기기 전에 를 생성 된 JSON 형식의 메시지가 서버에 메시지를 보낸다 :
{
"image_x_size":800,
"image_y_size":1600,
"features":
[
{"cart_x":5.0,"cart_y":124.0,"polar_angle":0.0,"polar_dist":0.0,"size":15.0},
{"cart_x":5.0,"cart_y":124.0,"polar_angle":0.0,"polar_dist":0.0,"size":15.0}
]
}
이 방법입니다 메시지는 서버에서 볼 수 있습니다 (즉, message
문자열의 내용) : 당신이 볼 수 있듯이
%7B+%09%22image_x_size%22%3A800%2C+%09%22image_y_size%22%3A1600%2C+%09%22features%22%3A+%09%09%5B+%09%09%09%7B%22cart_x%22%3A5.0%2C%22cart_y%22%3A124.0%2C%22polar_angle%22%3A0.0%2C%22polar_dist%22%3A0.0%2C%22size%22%3A15.0%7D%2C+%09%09%09%7B%22cart_x%22%3A5.0%2C%22cart_y%22%3A124.0%2C%22polar_angle%22%3A0.0%2C%22polar_dist%22%3A0.0%2C%22size%22%3A15.0%7D+%09%09%5D+%7D+
는 메시지 문자열은 다양한 16 진수 값은 특정 문자를 교체했다.
많은 감사의 말씀!
편집 : 나는 ...
HttpClient http_client = new DefaultHttpClient();
// Set long timeout limit
HttpConnectionParams.setConnectionTimeout(http_client.getParams(), 10000);
HttpConnectionParams.setSoTimeout(http_client.getParams(), 10000);
HttpResponse response;
// Setup json_object
JSONObject json_object = convertImageFeaturesToJSON(data, x, y);
try {
HttpPost http_post = new HttpPost(URL_BASE + "/featureuploader");
Log.i(TAG, json_object.toString());
StringEntity se = new StringEntity(json_object.toString());
se.setContentType("application/json; charset=UTF-8");
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json; charset=UTF-8"));
http_post.setEntity(se);
http_post.setHeader("Accept", "application/json");
http_post.setHeader("Content-Type", "application/json");
response = http_client.execute(http_post);
if (response != null) {
String response_string = httpResponseToString(response.getEntity().getContent());
if (! response_string.startsWith("Received: <html>")) {
Log.i(TAG, "Received: ERROR! - " + response_string.substring(0, 20));
} else {
Log.i(TAG, "Received: " + response_string);
}
} else {
Log.e(TAG, "Did not receive from server");
}
} catch (Exception e) {
Log.e(TAG, "Error: " + e.getMessage());
}