У меня есть действие контроллера, которое, я думаю, должно быть HTTP PUT, но Spring жалуется, когда я пытаюсь использовать @RequestParam в действии контроллера. Не разрешены ли параметры запроса для методов HTTP PUT, и поэтому Spring отклоняет их?
@RequestMapping(value = "/{helpDocumentId}/vote", method = RequestMethod.PUT)
public void voteHelpfulness(@PathVariable long helpDocumentId, @RequestParam boolean isHelpful) {
helpManager.voteOnHelpDocument(helpDocumentId, isHelpful);
}
При выполнении выдает такую ошибку:
org.springframework.web.bind.MissingServletRequestParameterException: Required boolean parameter 'isHelpful' is not present
Конечно, параметр isHelpful
присутствует. Я могу сделать так, чтобы приведенный выше код отлично работал для HTTP POST, поэтому я знаю, что это не проблема.
$.ajax({
url: "/help/" + helpDocumentId + "/vote.json",
type: "PUT",
data: {
isHelpful: isHelpful
},
success: function(response) {
// ....
}
});
Является ли PUT правильным методом http? Это действие изменяет helpDocument
, но не создает его.
@RequestBody
во многих местах, и даже мои тесты MockMvc были в порядке. Пока один контроллер фактически не использовал@RequestParam
, который все еще отлично работал сperform(put(...).param("name", "value"))
MockMvc, но не работал при фактическом развертывании в контейнере сервлетов... :-) - person Arjan   schedule 28.01.2013@RequestBody MultiValueMap<String, String>
.) - person Arjan   schedule 30.01.2013