【发布时间】:2014-08-19 02:56:14
【问题描述】:
我有两个 Spring MVC 控制器方法。两者都在请求正文中接收相同的数据(采用 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 请求的正文中传递数据,因为数据包含用于乐观锁定的行版本。
【问题讨论】:
-
你在使用Tomcat吗?
标签: spring spring-mvc