RestTemplate POST-запрос RequestParams и RequestBody

У меня есть сервер и клиент. Я использую Spring для сопоставления http-запросов на сервере и RestTemplate для отправки запросов на сервер.

Код сервера выглядит так:

@RequestMapping (value="/someEndPoint", method = RequestMethod.POST)
@ResponseBody
public String configureSettings(
@RequestParam(required=false) Integer param1,
@RequestParam(required=false) Long param2,
@RequestBody String body)
{

if(param1 != null)
// do something

if(body not empty or null)
//do something

} 

Сторона клиента:

String postUrl = "http://myhost:8080/someEndPoint?param1=val1"
restTemplate.postForLocation(postUrl, null);

Это работает, поскольку правильное действие запускается на стороне сервера из param1, однако тело запроса также содержит:
param1=val1
Тело запроса, когда оно установлено, будет json, поэтому все, что я хочу, это иметь возможность устанавливать другие параметры без установки тела. Я знаю, что неправильно использую restTemplate, поэтому любая помощь будет принята с благодарностью.


person Quantum_Entanglement    schedule 26.01.2012    source источник


Ответы (1)


Вы делаете HTTP POST, но не предоставляете объект для размещения POSTed. Spring RestTemplate пытается выяснить, что вы хотите POST, поэтому он смотрит и видит, что в строке запроса URL-адреса что-то есть, поэтому он пытается это использовать.

Не добавляйте строку запроса в POST, просто укажите объект, который вы хотите POST.

String postUrl = "http://myhost:8080/someEndPoint"
restTemplate.postForLocation(postUrl, new ParamModel("val1"));

Книга Spring in Action (3rd edition) довольно хорошо описывает RestTemplate (и REST в целом). Я бы порекомендовал взглянуть на него.

person nicholas.hauschild    schedule 26.01.2012