У меня есть два метода контроллера MVC Spring. Оба получат те же данные в теле запроса (в формате HTLM POST
: version=3&name=product1&id=2
), но один метод обрабатывает запросы PUT
и другой DELETE
:
@RequestMapping(value = "ajax/products/{id}", method = RequestMethod.PUT)
@ResponseBody
public MyResponse updateProduct(Product product, @PathVariable("id") int productId) {
//...
}
@RequestMapping(value = "ajax/products/{id}", method = RequestMethod.DELETE)
@ResponseBody
public MyResponse updateProduct(Product product, @PathVariable("id") int productId) {
//...
}
В первом методе все поля аргумента product
корректно инициализируются. Во втором случае инициализируется только поле id
. Другие поля null
или 0. (id
, вероятно, инициализируется из-за переменной пути id
).
Я вижу, что объект HttpServletRequest
содержит значения для всех полей тела запроса (version=3&name=product1&id=2
). Они просто не отображаются в поля параметра product
.
Как я могу заставить второй метод работать?
Я также попытался использовать аннотированные параметры @RequestParam
. В методе, обрабатывающем запросы PUT
, он работает. В методе DELETE
я получаю исключение: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'version' is not present
.
Мне нужно передать данные в теле запросов DELETE
, потому что данные содержат версию строки, которая используется для оптимистической блокировки.