Получение запроса 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 " в качестве заголовка.