Passer des données dans le corps d'une requête DELETE

J'ai deux Spring MVC méthodes de contrôleur. À la fois de recevoir les mêmes données dans le corps de la requête (en format HTLM POST forme: version=3&name=product1&id=2), mais une méthode poignées PUT demandes et un autre 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) {

//...
}

Dans la première méthode, tous les champs de la product argument sont correctement initialisés. Dans le second, seul le id champ est initialisé. Les autres champs sont null ou 0. (id est, probablement, initialisé à cause de la id variable de chemin d'accès).

Je peux voir que la HttpServletRequest objet contient des valeurs pour tous les champs dans le corps de la requête (version=3&name=product1&id=2). Ils ont juste ne sont pas mappés sur les champs de la product paramètre.

Comment puis-je faire la deuxième méthode de travail?

J'ai aussi essayé d'utiliser la @RequestParam annoté paramètres. Dans la méthode qui gère PUT demandes, il fonctionne. Dans le DELETE méthode, j'obtiens une exception: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'version' is not present.

J'ai besoin de passer des données dans le corps de DELETE demandes parce que les données contiennent une version de ligne ce qui est utilisé pour le verrouillage optimiste.

source d'informationauteur Alex | 2014-08-19