Spring не принимает параметр POST, если @RequestParam «required = false»
Я использую приложение Spring 3.1.2. У меня есть сервлет RESTful с несколькими методами. Методы GET работают фантастически (@PathVariables
сопоставление, ответы правильно маршалируются в JSON или XML на основе заголовка Accept и т. д.) 100% времени.
Однако метод POST просто не работает. После нескольких часов возни с новообращенными и всеми остальными аспектами Spring, которые я смог найти (все поменялось), я сузил круг дел доrequired
поле в@RequestParam
, Это упрощенный метод испытаний I 'использовал для расследования:
@RequestMapping (value = "/bogus",
method = POST)
public @ResponseBody PassResponse bogus (
@RequestParam (value = "test", required = false) String test) {
// Just some handy garbage objects that marshal to JSON/XML
UserResponse user = new UserResponse ();
user.setName (test);
AccountDetail detail = new AccountDetail (user,null);
return new PassResponse (detail);
}
требуется = ложь: все работает (параметр получен и интерпретирован). Точно так, как я ожидаю, что это сработает
требуется = истина: (или не указано, так как это по умолчанию) я последовательно получаю сообщение "MissingServletRequestParameterException: обязательный параметр String 'тестовое задание' нет "
Вид со стороны клиента:
требуется = истина
Request URL:http://localhost:8080/internal-project/rest/bogus
Request Method:POST
Status Code:400 Bad Request
Request Headersview source
Accept:application/json
Connection:keep-alive
Content-Length:12
Host:localhost:8080
Request Payload
test=LALALAA
Response Headersview source
Connection:close
Content-Length:971
Content-Type:text/html;charset=utf-8
Date:Wed, 24 Oct 2012 18:41:05 GMT
Server:Apache-Coyote/1.1
требуется = ложь
Request URL:http://localhost:8080/internal-project/rest/bogus
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json
Connection:keep-alive
Content-Length:12
Host:localhost:8080
Request Payload
test=LALALAA
Response Headersview source
Content-Type:application/json;charset=UTF-8
Date:Wed, 24 Oct 2012 18:44:03 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
Это тот же набор тестов, который запускается при переключенииrequired
и я вижу, что параметр передается. Когда параметр является необязательным, Spring обрабатывает его правильно.
Если кто-то сталкивался с этим раньше или у меня есть идеи, яЯ хотел бы услышать их. Обозначение обязательного параметра как необязательного, даже если он работает, само по себе является документированием, даже если я его комментирую. Плюс поведение заставляет меня немного нервничать. Надеюсь, я только что-то напортачил ...