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

时间:2012-09-01 14:15:55

标签: java spring spring-mvc

您好,我在重定向期间收到了下一条错误:

  

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

浏览器显示的网址是:localhost:8080/Project/menu/main/home/0,此处我的课程首先重定向 - “从”,第二个“到”:

 /*
 * 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);
    }
}

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

4 个答案:

答案 0 :(得分:35)

在这种情况下,org.springframework.web

DEBUG登录级别设置为log4j configuration非常有用
<logger name="org.springframework.web">
    <level value="DEBUG" />
    ...
</logger>

E.g。当参数丢失或无法转换为所需类型时,日志中将出现异常详细信息。

答案 1 :(得分:2)

在我的情况下,出现此错误的原因是浏览器(Chrome,在我的特定情况下)将date<input type="date" ... />以错误的格式发送到服务器,因此服务器没有&#39;我知道如何解析它。

答案 2 :(得分:0)

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

这样的事情:

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

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

答案 3 :(得分:0)

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