Я работаю над проектом Android, в котором я хочу создать соединение RESTful POST с сервером на основе Spring-MVC. Сначала я попытался опубликовать объект, но я использовал ошибки. Вот почему я попытался отправить объект JSON. В настоящее время я не получаю никаких ошибок в приложении Android, но когда я получаю объект JSON и получаю String, в объекте JSON ничего нет. Я отлаживал код, чтобы видеть, что значения отправляются правильно. Я не знаю, что я делаю неправильно. Любая помощь будет приятной. Большое спасибо.Spring-MVC & Android: сервер получает пустую строку JSON от android
Android код для отправки объекта:
@Override
public void addRestaurant(Restaurant restaurant) {
Log.d("Restaurant Name",restaurant.getRestaurantName());
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Looper.prepare();
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(),10000);
HttpResponse response;
JSONObject jsonObject = new JSONObject();
HttpPost post = new HttpPost(url);
jsonObject.put("restaurantName",restaurant.getRestaurantName());
jsonObject.put("postLeitZahl",restaurant.getPostLeitZahl());
jsonObject.put("phoneNumber",restaurant.getPhoneNumber());
jsonObject.put("id",restaurant.getId());
StringEntity stringEntity = new StringEntity(jsonObject.toString());
stringEntity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,"application/JSON"));
post.setEntity(stringEntity);
response = client.execute(post);
} catch (Exception e){
e.printStackTrace();
}
Looper.loop();
//String response = restTemplate.postForObject(url,restaurant,String.class);
//Log.d(response,"Response from webserver is");
}
});
thread.setPriority(Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
}
}
Spring Controller Код:
@RequestMapping(value = "/restaurant/add",method = RequestMethod.POST,consumes="application/json")
@ResponseBody
public String addRestaurantWebView(JsonObject restaurant){
System.out.println(restaurant.getAsString());
return "true";
}
Я не знаю, что я делаю не так, и у меня возникли проблемы с поиском некоторые ресурсы, которые могут сказать мне как настроить сервер в соответствии с кодом в android или наоборот. Большое спасибо .. :-)
Edit (Solution) (Partial с Java Objects)
В моей первоначальной цели была отправить объект Java, который был неисправным, я вернулся к JSON, но позже его работал с Java, вот код Android и Spring-MVC Controller и bean, который работал для меня.
Android код:
package com.example.myapp;
import android.os.Process;
import android.util.Log;
import org.springframework.http.*;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
public class RestaurantServiceImpl implements RestaurantService {
String url = "http://192.168.178.40:8080/restaurant/add";
@Override
public void addRestaurant(Restaurant restaurant) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity entity = new HttpEntity(restaurant,headers);
ResponseEntity<String> out = restTemplate.exchange(url, HttpMethod.POST,entity,String.class);
Log.d(out.toString(),"Response from server");
} catch (Exception e){
e.printStackTrace();
}
}
});
thread.setPriority(Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
}
}
Spring MVC-контроллер:
@RequestMapping(value = "/restaurant/add",method = RequestMethod.POST)
@ResponseBody
public String addRestaurantWebView(@RequestBody Restaurant restaurant){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("restaurant", new Restaurant());
modelAndView.addObject(restaurant);
this.restaurantService.addRestaurant(restaurant);
return "true";
}
Servlet-context.xml
Добавить это:
<mvc:annotation-driven />
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<beans:property name="messageConverters">
<beans:ref bean="jsonMessageConverter"/>
</beans:property>
</beans:bean>
<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
Первая попытка проверить сервер, посылая POST вручную клиентский инструмент для отдыха, например, клиент Advanced Rest или Postman. Таким образом, вы будете уверены, что сервер работает нормально. – hmartinezd
@hmartinezd: Сделал это. Я получаю неподдерживаемый тип запроса 415. Я предполагаю, что я должен изменить код сервера. Вы знаете, как должен быть Контроллер? –
Вы настраиваете в Rest Client для отправки Json? Слушает ли ваша сторона на стороне Json? У меня нет опыта в том, что вы используете на сервере. Не могу сказать точно. – hmartinezd