Как я могу заставить это работать с GET или это должен быть POST со службой REST весной

Я работаю на некоторых веб-серверах, и мне нужно отправить некоторые данные в веб-службу и вернуть код состояния. Я думаю, может быть, это должен быть POST, а не GET, но я хотел бы услышать от всех профи в Интернете.

Вот мой клиентский код с использованием Spring RESTTemplate

vars.put("lastName", "JOHN");
vars.put("firstName", "SMITH");
vars.put("middleInitial", "");
vars.put("socialSecurityNumber", "111-11-1111");
vars.put("Type","A");
vars.put("FileNumber","");
vars.put("EISNumber","");


String jsonreturn = restTemplate.getForObject("http://" + mRESTServer.getHost() + ":8080/services/api/checkstatus", String.class, vars);

Теперь вот код моей службы (служба Spring MVC RESTful). Я бы подумал, что все поля, которые я ввел в клиенте, будут в объекте ModelMap, но это не так.

@RequestMapping(value = "/checkstatus", method = RequestMethod.get)
@ResponseBody
public ResponseEntity<String> getCheckEnrollStatus(ModelMap model) throws ResourceNotFoundException
{
        logger.debug("Looking for  Status: " + model.toString());
}

Итак, у меня есть два вопроса:

1) Должен ли я изменить GET на POST из-за отправки большого количества данных на сервер?

2) Если я оставлю это как get, почему моя ModelMap пуста?

Пожалуйста, помогите мне


person user2428795    schedule 19.06.2013    source источник
comment
stackoverflow.com/q/978061/106261   -  person NimChimpsky    schedule 19.06.2013


Ответы (3)


Чтобы ваш ModelMap был заполнен, вам, вероятно, потребуется аннотировать его с помощью @RequestBody.

Как указано в комментарии, у вас не может быть тела запроса с GET в соответствии со спецификацией. Таким образом, вам нужно либо сделать параметры частью URL-адреса, либо использовать get или convert для POST.

Хотя POST, похоже, не соответствует цели вашего звонка.

person Jim    schedule 19.06.2013
comment
В HTTP GET не должно быть RequestBody. - person Zaki; 19.06.2013
comment
@ user2428795 вам не следует менять его на POST, как объяснено в моем ответе и спецификации. - person NimChimpsky; 19.06.2013
comment
@user2428795 user2428795, если вы собираетесь использовать POST, я бы предложил использовать POJO для представления содержимого карты, чтобы у вас был хорошо типизированный объект для маршалинга туда и обратно. Сделает код чище. - person Jim; 19.06.2013
comment
@user2428795 user2428795 не используйте сообщение для этого, это противоречит соглашению об отдыхе и спецификации http. 7 параметров запроса/uri не сложны и не сложны. - person NimChimpsky; 19.06.2013
comment
но я должен пройти в 7 полях - person user2428795; 19.06.2013

Обычно я бы сказал, что это должен быть GET, но я заметил, что у вас есть socialSecurityNumber в качестве одного из ваших параметров. Вы определенно НЕ хотите, чтобы это было частью вашего URL. Ознакомьтесь с RFC 2616, раздел 15.1.3.

Авторы сервисов, использующих протокол HTTP, НЕ ДОЛЖНЫ использовать формы на основе GET для отправки конфиденциальных данных, потому что это приведет к тому, что эти данные будут закодированы в Request-URI. Многие существующие серверы, прокси-серверы и пользовательские агенты будут регистрировать URI запроса в каком-то месте, где он может быть виден третьим лицам. Вместо этого серверы могут использовать отправку форм на основе POST.

Сделайте ПОСТ.

person Jeremiah Orr    schedule 19.06.2013