controller中返回视图名称的规范

在部署springboot项目到云服务器中遇到一个坑:视图解析不了,回顾代码发现,原来是视图名称写的有问题代码如下:

 @GetMapping("")
    public String index() {
        return "/front/index";
    }

结果死活说找不到/front/index,但是本地环境运行却正常。改成如下代码云服务器运行也正常了

 @GetMapping("")
    public String index() {
        return "front/index";
    }

原因分析
在默认情况下,Spring Boot使用Thymeleaf作为视图解析器时,它期望视图名称是一个相对于templates目录的路径。因此,如果你写成"/front/index",理论上Thymeleaf可能会尝试从文件系统的根目录或者某个特定的绝对路径下去查找front/index.html文件,这并不是你想要的结果。
但是,实际上,Spring Boot的Thymeleaf视图解析器通常会对你提供的视图名称进行智能处理,即使你错误地添加了/前缀,它也可能能够正确地解析出相对于templates目录的路径。这是因为Thymeleaf视图解析器在内部会处理这些路径,并且通常会去掉视图名称前的/(如果它存在的话)。
然而,这种行为并不是所有视图解析器都会保证的,也不是Spring Boot官方文档所推荐的做法。因此,为了避免潜在的问题和不一致的行为,你应该始终遵循Spring Boot的约定,即:

不在视图名称前添加/前缀。
省略.html后缀(因为Thymeleaf会自动添加它)。

这样,Spring Boot的Thymeleaf视图解析器就会去templates目录下查找front/index.html文件,并且正确地渲染它作为响应返回给客户端。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容