错误信息
Circular view path [iframe-1]: would dispatch back to the current handler URL [/study/iframe-1] again
运行环境
springboot项目,没有配置模板引擎
代码
package me
.study
.com
.springboot
.controller
;
import org
.springframework
.stereotype
.Controller
;
import org
.springframework
.web
.bind
.annotation
.GetMapping
;
import org
.springframework
.web
.bind
.annotation
.RequestParam
;
@Controller
public 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 me
.study
.com
.springboot
.controller
;
@Controller
public 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,控制台打印了
luckee
18
luckee
浏览器显示404错误页面,这说明了以下几点:
当一个URL同时匹配到一个HandlerMethod和一个静态资源的时候,最终执行的是HandlerMethod而不是返回静态资源HandlerMethod的参数加不加@RequestParam都行springboot的静态资源默认放在/resource/static下面如果没有配置模板引擎,HandlerMethod返回的字符串会作为转发的URL,去重新匹配HandlerMethod,所以request是共享的,从打印了两次luckee可以看得出来
一个疑问
使用ajax的时候,请求的URL一般都是返回数据(json或xml或其他格式的),如果URL指向的是一个完整的页面会是怎样的效果,是否可以将返回的页面当做一个iframe嵌入当前页面,有待测验