背景
@RestController = @ResponseBody + @Controller
@Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
@Mapping + @ResponseBody 也会出现同样的问题。
解决办法
①去除@ResponseBody 或 将含有Rest的注解换成对应的原始注解;
②不通过String返回,通过ModelAndView对象返回,上述例子可将return语句换成return new ModelAndView("index")
。
前提
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>hello</title>
</head>
<body>
你好!初学者,我是SpringBoot的简单启动页面!
</body>
</html>
@Controller
public class HelloController {@RequestMapping("/map1")public String index() {return "index.html";}@RequestMapping("/map2")public String map2() {return "index2.html";}
}
不使用 模板引擎
访问的页面放在resources/static/,就可直接访问这个页面
http://localhost:8080/index.html 成功返回http://localhost:8080/map1 成功返回
访问的页面放在resources/templates/,禁止访问这个页面
http://localhost:8080/index2.html 404返回http://localhost:8080/map1 404返回
[Ref] SpringBoot如何返回页面
使用 模板引擎
使用 springmvc 配置
如果使用spring-boot-starter-parent
,就无需引入依赖
spring:mvc:view:suffix: .htmlstatic-path-pattern: /**web:resources:static-locations: classpath:/templates/,classpath:/static/
http://localhost:8080/index.html 成功返回
http://localhost:8080/index.htm2 成功返回http://localhost:8080/map1 报404
http://localhost:8080/map2 报404
调用接口需要 redirect
@Controller
public class HelloController {@RequestMapping("/map1")public String index() {return "redirect:index.html";}@RequestMapping("/map2")public String map2() {return "redirect:index2.html";}
}
http://localhost:8080/index.html 成功返回
http://localhost:8080/index.htm2 成功返回http://localhost:8080/map1 成功返回
http://localhost:8080/map2 成功返回
使用Thymeleaf模板引擎
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>2.1.6.RELEASE</version>
</dependency>
http://localhost:8080/index.html 成功返回
http://localhost:8080/index2.html 404返回
spring:thymeleaf:prefix: classpath:/static/suffix: .htmlcache: false #关闭缓存
但是缺点是智能配置一个,配置谁谁好用配置 prefix: classpath:/static/
http://localhost:8080/map1 成功返回
http://localhost:8080/map2 404返回配置 prefix: classpath:/templates/
http://localhost:8080/map1 404返回
http://localhost:8080/map2 成功返回
返回效果演示
成功返回
404返回
参考
SpringBoot如何返回页面