在Spring控制器方法中循环

时间:2013-07-12 04:32:49

标签: spring spring-mvc

我的一个弹簧控制器中有一些非常奇怪的行为,我无法解释。

所以这就是我所拥有的。非常简单的控制器。

@RequestMapping(value="/doSomething")
public void doSomething(@RequestParam int value, HttpSession session) {

    System.out.println("Lorem");

    // Some stuff later on done here

    System.out.println("ipsum");

}

当我请求映射的URL时,控制器的行为就像内部有一个无限循环一样。所以它从输出“Lorem”然后“ipsum”开始,而不是离开方法,它从方法的开头再次开始。它不是从外部多次调用的。有人知道这种行为或有任何线索吗?此外,我可以观察到输出速度变慢,因为内存大幅增加到大约1.5 GB,并且100%的CPU使用率遍布每个核心。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

你的处理程序方法对我来说似乎不对。通常,您需要返回一个将被ViewResolver解析为View的字符串,例如:

@RequestMapping(value="/doSomething")
public String doSomething(@RequestParam int value, HttpSession session) {
   // ....
  return "somethingdone";
}

答案 1 :(得分:0)

这是我的理解。

如果控制器声明了void返回类型,Spring将尝试从请求URL推断出视图名称。

在您的情况下,它将假设视图名称为“doSomething”,并继续该假设。

它使用RequestToViewNameTranslator的实现来实现这一点,RequestToViewNameTranslator的默认实现是DefaultRequestToViewNameTranslator

请参阅this