问题解决
问题解释
出现这个问题表示拦截器或控制器的某个请求处理方法返回了一个与请求路径相同的视图名称,导致视图解析器循环地尝试解析并渲染这个视图,从而引发循环视图路径的异常。
问题分析
原先的java代码如下
@Controller
@RequestMapping("/interceptor")
public class InterceptorController {
@RequestMapping("/test")
public String test() {
return "test";
}
}
发现返回的字符串值是test,与请求路径相同,可能会导致循环视图问题
更改为test1后,依然报错无法解析视图名称 test1,因此抛出了异常。
思考:该问题是在配置拦截器的demo时产生,demo本身是一个对接口的测试,按理来说不需要返回视图,只需要结果即可。
@RestController 和 @Controller的区别如下:
- @Controller是一个常规的MVC控制器,主要用于处理HTTP请求返回视图名字和数据。返回视图名时,会默认去寻找对应的JSP文件,然后渲染该视图。
- @RestController是 @Controller 和 @ResponseBody 的组合。主要返回的是JSon数据和XML数据,而不是视图名。
在这个例子中,由于使用的是@Controller注解,所以springboot会优先寻找对应的JSP资源,如果没有找到,会报错,视图名称如果和请求路径相同,视图解析器会再一次尝试请求同一个路径,导致循环。
所以我们只需要把@Controller修改为@RestController即可
问题解决
更改后代码如下
@RestController
@RequestMapping("/interceptor")
public class InterceptorController {
@RequestMapping("/test")
public String test() {
return "test";
}
}
可成功运行