Spring:客户端发送的请求在语法上是不正确的()

嗨我在重定向期间收到了下一个错误:

客户端发送的请求在语法上是不正确的

浏览器显示的URL是: localhost:8080/Project/menu/main/home/0 ,这里我的类首先重定向 – “from”,second“to”:

  /* * Get all possible values of menu and generate correct url to pages controllers * */ @Controller @SessionAttributes("menu") public class MainMenuController { @ModelAttribute public Menu createMenu() { return new Menu(); } @RequestMapping(value = "/menu", method = RequestMethod.GET) public String mainMenuResolver(@ModelAttribute Menu menu) { menu.setMainMenu("first"); return "forward:/menu/first"; } @RequestMapping(value = "/menu/{mainMenu}", method = RequestMethod.GET) public String subMenuResolver(@PathVariable String mainMenu, @ModelAttribute Menu menu) { menu.setMainMenu(mainMenu); menu.setSubMenu("home"); return "forward:/menu/first/home"; } @RequestMapping(value = "/menu/{mainMenu}/{subMenu}", method = RequestMethod.GET) public String secMenuResolver(@PathVariable String mainMenu, @PathVariable String subMenu, @ModelAttribute Menu menu) { menu.setMainMenu(mainMenu); menu.setSubMenu(subMenu); menu.setSecMenu("0"); if (menu.getMainMenu().equals("first")){ return "redirect:/menu/main/"+menu.getSubMenu()+"/"+menu.getSecMenu(); } if (menu.getMainMenu().equals("second")){ return "redirect:/menu/religion/"+menu.getSubMenu()+"/"+menu.getSecMenu(); } return "redirect:/menu/main/"+menu.getSubMenu()+"/"+menu.getSecMenu(); } } 

第二课:

 @Controller @SessionAttributes("menu") public class FirstPageController { @ModelAttribute public Menu createMenu() { return new Menu(); } @RequestMapping(value = "/menu/main/{subMenu}/{secMenu}", method = RequestMethod.GET) public ModelAndView menuResolver(@PathVariable String mainMenu, @PathVariable String subMenu,@PathVariable String secMenu, @ModelAttribute("menu") Menu menu) { menu.setMainMenu(mainMenu); menu.setSubMenu(subMenu); menu.setSecMenu(secMenu); if (menu.getSubMenu().equals("home")){ String title = "Project - Home Page"; return new ModelAndView("MainPage", "title", title); } String title = "Project - Home Page"; return new ModelAndView("MainPage", "title", title); } } 

解决 :我解决了它,在第二类方法中有多余的参数。

在这种情况下,在log4j configuration中将org.springframework.web登录级别设置为DEBUG非常有用

   ...  

例如,当参数丢失或无法转换为所需类型时,日志中将存在exception详细信息。

在我的情况下,这个错误的原因是浏览器(Chrome,在我的特定情况下)将date发送到服务器的格式错误,所以服务器不知道如何解析它。

正如ike3所说,使用详细日志帮助我找到解决方案。 在我的例子中,没有指定名称的@PathVariable与变量本身不匹配。

像这样的东西:

 @RequestMapping("/user/{uname}") public String doSomething(@PathVariable String username) { ... 

注意“uname”和“username”之间的区别! 内部有一个未引发的exception,直到我将日志设置为INFO级别才能看到它。

在我的情况下,它也是一个转换问题,Spring期待一个Integer但是我输入了一个String。 尝试检查您作为参数传递给控制器​​的内容