Spring MVC: Error 400 The request sent by the client was syntactically incorrect
java, spring, spring-mvc
Solution
I also had this issue and my solution was different, so adding here for any who have similar problem.
My controller had:
@RequestMapping(value = "/setPassword", method = RequestMethod.POST)
public String setPassword(Model model, @RequestParameter SetPassword setPassword) {
...
}
The issue was that this should be `@ModelAttribute` for the object, not `@RequestParameter`. The error message for this is the same as you describe in your question.
@RequestMapping(value = "/setPassword", method = RequestMethod.POST)
public String setPassword(Model model, @ModelAttribute SetPassword setPassword) {
...
}
Problem
This seems to be a common issue. I have gone all the answers given in SO but could not make it work. I am trying to integrate Spring MVC+Freemarker in already existing web application. It works fine for the `GET` request and Freemarker Template reads java object provided by Controller without any issue. But Form submission is not able to hit Controller method. Finally I made log4j work. Here is the error I am getting: Error ``` HandlerMethod details: Controller [application.entry.controller.UserController] Method [public void application.entry.controller.UserController.handleSave(java.lang.String)] org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'action' is not present ``` Freemarker: ``` <form method="POST" action="save.html"> ------------ <input type="submit" class="btnnew" name="saveWithoutValidation" value="Save Without Validation"></input> <input type="submit" class="btnnew" name="submit" value="Submit"></input> </form> ``` context-root is PORTAL. spring-servlet.xml ``` <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="cache" value="true"/> <property name="prefix" value=""/> <property name="suffix" value=".ftl"/> ``` web.xml ``` <servlet> <servlet-name>spring</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` Controller ``` @RequestMapping(value="/save", method=RequestMethod.POST) public void handleSave(@RequestParam String action){ if( action.equals("submit") ){ System.out.println("Damn! You clicked submit"); } else if( action.equals("saveWithoutValidation") ){ System.out.println("Sweet! You want no string attached."); } } ``` For logs I have tried to add `log4j.logger.org.springframework.web=DEBUG` to my existing log4j.properties but it didn't work.