错误信息
Circular view path [iframe-1]: would dispatch back to the current handler URL [/study/iframe-1] again
运行环境
springboot项目,没有配置模板引擎
代码
package .springboot.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;@Controllerpublic class NotRestController {@GetMapping(value = {"/iframe-1"})public String iframe1(String name, @RequestParam String age){System.out.println(name);System.out.println(age);return "iframe-1";}}
原因猜测
如果配置了模板引擎,返回的字符串应该是逻辑视图名,但这里没有配置模板引擎,所以返回的字符串还是作为URL,并根据URL来查找映射的HandlerMethod,所以又返回到iframe1这个方法了
改造一下
package .springboot.controller;@Controllerpublic class NotRestController {@GetMapping(value = {"/iframe-1.html"})public String iframe1(String name, @RequestParam String age){System.out.println(name);System.out.println(age);return "iframe-2";}@GetMapping(value = {"/iframe-2"})public String iframe2(String name){System.out.println(name);return "iframe-1";}}
context path为/study,端口为80,访问localhost/study/iframe-1.html?name=luckee&age=18
,控制台打印了
luckee18luckee
浏览器显示404错误页面,这说明了以下几点:
当一个URL同时匹配到一个HandlerMethod和一个静态资源的时候,最终执行的是HandlerMethod而不是返回静态资源HandlerMethod的参数加不加@RequestParam都行springboot的静态资源默认放在/resource/static下面如果没有配置模板引擎,HandlerMethod返回的字符串会作为转发的URL,去重新匹配HandlerMethod,所以request是共享的,从打印了两次luckee可以看得出来
一个疑问
使用ajax的时候,请求的URL一般都是返回数据(json或xml或其他格式的),如果URL指向的是一个完整的页面会是怎样的效果,是否可以将返回的页面当做一个iframe嵌入当前页面,有待测验