У меня есть два метода контроллера 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, потому что данные содержат версию строки, которая используется для оптимистической блокировки.