Unfortunately FormHttpMessageConverter
(which is used for @RequestBody
-annotated parameters when content type is application/x-www-form-urlencoded
) cannot bind target classes (as @ModelAttribute
can).
Therefore you need @ModelAttribute
instead of @RequestBody
. If you don’t need to pass different content types to that method you can simply replace the annotation:
@RequestMapping(method = RequestMethod.POST)
public ModelAndView create(@ModelAttribute UserAccountBean account) { ... }
Otherwise I guess you can create a separate method form processing form data with the appropriate headers
attribute:
@RequestMapping(method = RequestMethod.POST,
headers = "content-type=application/x-www-form-urlencoded")
public ModelAndView createFromForm(@ModelAttribute UserAccountBean account) { ... }
EDIT: Another possible option is to implement your own HttpMessageConverter
by combining FormHttpMessageConverter
(to convert input message to the map of parameters) and WebDataBinder
(to convert map of parameters to the target object).