Para que esto funcione correctamente, usted tiene que estar seguro de que' re usando AnnotationMethodHandlerAdapter. Esto anula HandlerMethodInvoker'screateHttpInputMessage (que arroja la excepción que está viendo). (Esto se hace de una clase privada.)
Creo que sólo puede incluir lo siguiente en su * -servlet.xml
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
ADVERTENCIA: La respuesta a continuación es para el caso de necesitar @RequestBody y @RequestParam en el mismo método de controlador. No responde a esta pregunta, pero podría ser útil para alguien.
He probado esto usando Spring 3.0.1. Esto es posible, pero es algo precario. DEBE tener su argumento de método @RequestBody antes de su argumento @RequestParam. Supongo que esto se debe a que HandlerMethodInvoker lee el cuerpo de la solicitud (junto con los parámetros GET) al recuperar parámetros (y el cuerpo de la solicitud solo se puede leer una vez).
He aquí un ejemplo (ADVERTENCIA: código que en Scala, así que no he compilado el código de Java)
@RequestMapping(value = "/test", method = RequestMethod.POST)
public String test(
@RequestBody String body,
@RequestParam("param1") String parma1,
Map<Object, Object> model: Map[AnyRef, AnyRef])
{
model.put("test", test)
model.put("body", body)
return "Layout"
}
Una alternativa es utilizar @PathVariable. He confirmado que esto funciona.
¿Tiene sus anotaciones @Controller y @RequestMapping en su lugar? – GriffeyDog
¿Es que estás tratando de obtener el cuerpo POST en la variable @RequestBody y los parámetros GET en la variable @ModelAttribute? –
@three_cups_of_java: Sí. –