我的一个弹簧控制器中有一些非常奇怪的行为,我无法解释。
所以这就是我所拥有的。非常简单的控制器。
@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使用率遍布每个核心。谢谢你的帮助。
答案 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