고수님들의 도움이 절실히 필요합니다.
안드로이드에서 서버로 데이터 송수신 관련 질문입니다.
전송하는 데이터 타입은 json입니다.
아래의 code로 서버로부터 데이터를 받아올 경우에는 문제가 없습니다.(get)
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
String url = mServerURL.substring(0);
ResultEnvelopeTO envelop = restTemplate.getForObject(url, ResultEnvelopeTO.class);
그러나, 서버로 데이터를 저장할 경우, 400 Bad Request가 발행합니다. (post)
public static ResultEnvelopeTO POST_TO(String userID, String resource, Object obj) {
int loop = sRetryCount;
do {
try {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
String url = mServerURL.substring(0);
ResultEnvelopeTO response = restTemplate.postForObject(url, obj, ResultEnvelopeTO.class);
return response;
} catch(org.springframework.web.client.ResourceAccessException e) {
System.out.println(e.getMessage());
if (e.getRootCause() instanceof java.net.SocketTimeoutException) {
continue;
}
e.printStackTrace();
break;
} catch(RuntimeException x) {
System.out.println(x.getMessage());
x.printStackTrace();
break;
}
} while(0 <= --loop);
return null;
}
에러는 아래와 같이 나타납니다.
400 Bad Request
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:76)
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:524)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:481)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:317)
at com.lge.ifsda.android.provider.task.server.util.TaskUtils.testServerDAO_POST_TO(TaskUtils.java:138)
at com.lge.ifsda.android.provider.task.server.TaskSleepReportDate.setUserFeedbackList(TaskSleepReportDate.java:143)
at com.lge.ifsda.android.provider.task.file.TaskSleepReportDate.setUserFeedback(TaskSleepReportDate.java:295)
at com.lge.ifsda.android.provider.task.server.TaskSleepReportDate.tx(TaskSleepReportDate.java:41)
at com.lge.ifsda.android.provider.FSAnalyzerApplication$3.doInBackground(FSAnalyzerApplication.java:450)
at com.lge.ifsda.android.provider.FSAnalyzerApplication$FSAnalyzerAsyncTask.doInBackground(FSAnalyzerApplication.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)