springboot中静态页面无法访问及return无法重定向问题

1. 前言

这几天做一个小项目,碰到了一些奇葩bug,各种百度都无法解决,只有自己一个一个试,气到爆炸。springboot中静态页面templates下的HTML文件无法直接访问,还有就是return "redirect:”无法重定向问题,这篇博客就解决这个坑。

2. 静态页面无法加载

先看看我的项目目录架构:

templates下的静态页面根本无法通过localhost:8080/ 访问

原因是啥呢?

  • 静态资源加载顺序顺序
    静态资源路径默认配置:
spring.resources.static-locations = classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

静态页面spring boot根本没有加载,导致无法直接访问。

怎么解决?

很简单,修改加载路径,加上templates就行了。

  • yml配置如下
spring:
  resources:
    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/templates/

  • xml配置
spring.resources.static-locations = classpath: /META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/templates/

注意: 网上还有加入thymeleaf模块引擎,但是我加了没用,如果页面还有thymeleaf使用的话,肯定要加入的。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3. return "redirect:”无法重定向

一直在网上查问题,路径改了无数次,都不能访问,搞了一晚上,第二天试着改了一下@RestController注解,发现就行了,无言以对,网上硬是没找到方法。
就只需要把@RestController改成@Controller注解即可。

原因分析

@RestController注解相当于@ResponseBody + @Controller合在一起的作用

  • 原因就是 @ResponseBody注解引起的
    @ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

不会被解析成跳转路径,那么 return "redirect:” 重定向也就失效了。解决方法就是把@RestController改成@Controller注解。

4. 小结&参考资料

小结

看起来问题很小,但就是因为这个小问题就浪费了整整两天时间,又肝又气,真的很累的,但解决后就很开心了,就像高中做数学题一样,几个小时解一道数学题 ,做出来就会很开心。但也需要坚持,半途而废最终就没成果了。

参考资料

猜你喜欢

转载自blog.csdn.net/chachapaofan/article/details/88074317