Получение запроса POST на сервере (Spring Framework) из приложения Android
Я отправляю запрос POST на сервер из моего приложения Android. Сервер разработан с использованием Spring Framework. Запрос получен сервером, но параметр, который я отправлял, равен null / empty (показан в журнале).
код, используемый для отправки запроса POST:
DefaultHttpClient hc=new DefaultHttpClient();
ResponseHandler <String> res=new BasicResponseHandler();
String postMessage = "json String";
HttpPost postMethod=new HttpPost("http://ip:port/event/eventlogs/logs");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("json", postMessage));
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
hc.execute(postMethod,res);
Я также попытался установить HttpParams следующим образом, но это также не удалось:
HttpParams params = new BasicHttpParams();
params.setParameter("json", postMessage);
postMethod.setParams(params);
код на стороне сервера, который получил этот запрос есть:
@RequestMapping(value = "/eventlogs/logs", method = RequestMethod.POST)
public String logs(@ModelAttribute("json") String json) {
logger.debug("Received POST request:" + json);
return null;
}
сообщение регистратора, которое я регистрирую, показывает:
Received POST request:
есть идеи, что мне здесь не хватает ?
3 ответов
возможно, весна не преобразует ваш POST
на Model
. Если это так, он не будет знать, что атрибут json
на свой Model
потому что нет Model
!
посмотри Весенняя документация, касающаяся сопоставления тела запроса.
вы должны иметь возможность использовать пружины MessageConverter
реализации, чтобы сделать то, что вы хотите. В частности, взгляните на FormHttpMessageConverter
, который преобразует данные формы в/из MultiValueMap<String, String>
.
@RequestMapping(value = "/eventlogs/logs", method = RequestMethod.POST)
public String logs(@RequestBody Map<String,String> body) {
logger.debug("Received POST request:" + body.get("json"));
return null;
}
добавление этой строки в конфигурацию xml должно включить FormHttpMessageConverter
по умолчанию:
<mvc:annotation-driven/>
Я использовал аннотацию RequestParam, и она работает для меня. Теперь код на сервере выглядит следующим образом:
@RequestMapping(value = "/eventlogs/logs", method = RequestMethod.POST)
public String logs(@RequestParam("json") String json) {
logger.debug("Received POST request:" + json);
return null;
}
Я думаю, вам нужно добавить заголовок content-type от клиента. MessageConverter для JSON регистрирует его самостоятельно с несколькими типами контента, которые он примет, один-application / json.
Если вы отправляете с типом контента, не обрабатываемым любым MessageConvert, он не будет работать.
попробуйте добавить" Content-type: application/json " в качестве заголовка.