弹簧休息控制器不返回html
Posted
技术标签:
【中文标题】弹簧休息控制器不返回html【英文标题】:Spring rest controller not returning html 【发布时间】:2017-09-01 23:38:30 【问题描述】:我使用的是 spring boot 1.5.2,我的 spring rest 控制器看起来像这样
@RestController
@RequestMapping("/")
public class HomeController
@RequestMapping(method=RequestMethod.GET)
public String index()
return "index";
当我转到http://localhost:8090/assessment/ 时,它会到达我的控制器,但不会返回我的 index.html,它位于 src/main/resources 或 src/main/resources/static 下的 maven 项目中。如果我访问这个 url http://localhost:8090/assessment/index.html,它会返回我的 index.html。我查看了本教程https://spring.io/guides/gs/serving-web-content/,他们使用百里香叶。我必须使用 thymeleaf 或类似的东西让我的弹簧休息控制器返回我的视图吗?
我的应用程序类看起来像这样
@SpringBootApplication
@ComponentScan(basePackages="com.pkg.*")
public class Application
public static void main(String[] args) throws Exception
SpringApplication.run(Application.class, args);
当我将 thymeleaf 依赖项添加到我的类路径时,我收到此错误(500 响应代码)
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers
我想我确实需要百里香叶?我现在将尝试正确配置它。
更改我的控制器方法以返回 index.html 后它可以工作
@RequestMapping(method=RequestMethod.GET)
public String index()
return "index.html";
我认为 thymeleaf 或类似的软件可以让您省略文件扩展名,但不确定。
【问题讨论】:
对于初学者,将其设为Controller
而不是 RestController
现在它仍然到达控制器,但我得到一个 404,无论 index.html 是在 src/main/resources 还是 src/main/resources/static 中。 localhost:8090/assessment/index.html 仍然有效
【参考方案1】:
RestController 注释从方法返回 json,而不是 HTML 或 JSP。它是@Controller 和@ResponseBody 合二为一。 @RestController 的主要目的是创建 RESTful Web 服务。对于返回 html 或 jsp,只需使用 @Controller 注释控制器类即可。
【讨论】:
我已将其更改为@Controller,现在我得到一个 404 但请求映射仍在工作。我需要添加视图解析器 bean 吗? http://localhost:8090/assessment/index.html 仍然有效 不,这就是给我 404 的原因 给出 404。将百里香添加到我的类路径后得到 500 现在我得到一个 304,它到达了我的控制器【参考方案2】:你的例子是这样的:
您的控制器方法与您的路线“评估”
@Controller
public class HomeController
@GetMapping("/assessment")
public String index()
return "index";
“src/main/resources/templates/index.html”中的 Thymeleaf 模板
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Serving Web Content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p>Hello World!</p>
</body>
</html>
【讨论】:
【参考方案3】:我通过从配置类中删除 @EnableWebMvc
注释解决了这个问题。
Spring MVC 自动配置提供静态
index.html
支持。如果你想完全控制 Spring MVC,你可以添加你的 自己的
@Configuration
用@EnableWebMvc
注释。
从Spring MVC Auto-configuration获取更多详细信息。
【讨论】:
【参考方案4】:如果您尝试“构建 RESTful Web 服务” -> 如果不使用 @Controller
类注释您的控制器类,则使用 @RestController
注释注释您的控制器类。
当我们使用spring作为SpringMVC - @Controller
当我们使用 spring 作为 SpringRESTfull Web Service - @RestController
使用此链接阅读:Spring Stereo Type
【讨论】:
以上是关于弹簧休息控制器不返回html的主要内容,如果未能解决你的问题,请参考以下文章