Получение POST-запроса на сервере (Spring Framework) из приложения Android - PullRequest
8 голосов
/ 10 октября 2011

Я отправляю запрос POST на сервер из моего приложения Android. Сервер разработан с использованием Spring Framework. Запрос получен сервером, но отправленный мною параметр пуст / пуст (показан в журнале).

Код, используемый для отправки запроса 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;
}

Сообщение Logger, которое я регистрирую, показывает:

Received POST request:

Есть идеи, что мне здесь не хватает?

Ответы [ 3 ]

7 голосов
/ 10 октября 2011

Возможно, Spring не преобразует ваше POST тело в Model.Если это так, он не будет знать, какой атрибут json находится на вашем Model, потому что нет Model!

Посмотрите документацию Spring относительно отображения запросаbody .

Вы должны иметь возможность использовать реализации Springs 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/>
4 голосов
/ 11 октября 2011

Я использовал аннотацию RequestParam, и она работает для меня. Теперь код на сервере выглядит следующим образом:

@RequestMapping(value = "/eventlogs/logs", method = RequestMethod.POST)
public String logs(@RequestParam("json") String json) {
logger.debug("Received POST request:" + json);

    return null;
}
2 голосов
/ 11 октября 2011

Я думаю, вам нужно добавить заголовок типа контента от клиента. MessageConverter для JSON регистрирует себя с помощью пары типов контента, которые он принимает, один - application / json.

Если вы отправляете контент с типом контента, который не обрабатывается никаким MessageConvert, он не будет работать.

Попробуйте добавить «Content-type: application / json» в качестве заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...