如何在没有thymeleaf的Spring Boot中返回html页面

问题描述 投票:0回答:3

如果我从 pom.xml spring-boot-starter-thymeleaf 中删除,那么我的 @GetMapping 无法返回 html 页面。 [在此处输入图像描述](https://i.sstatic.net/NJvOn.png)

我尝试过:

  1. 添加@ResponseBody - 不起作用(他的返回字符串在网站中,而不是html页面)
  2. 将 @Controller 替换为 @RestControllerin - 不起作用
  3. 使用 ModelAndView - 不起作用(modelAndView.setViewName(“index”或“index.html”或“static/index.html”或...)
java html spring thymeleaf get-mapping
3个回答
1
投票
  1. 添加@ResponseBody - 不起作用(他在网站中返回字符串,而不是 html 页面)

因为浏览器会读取你的响应头“Content-Type”来决定如何显示内容。所以需要指定内容类型为html。

@GetMapping("/")
public void indexPage(HttpServletResponse response) throws IOException {
    response.setHeader("Content-Type", "text/html;charset=utf-8"); //specify the content is html
    PrintWriter out = response.getWriter();
    out.write("<form action='#' method='post'>");
    out.write("username:");
    out.write("<input type='text' name='username'><br/>");
    out.write("password:");
    out.write("<input type='password' name='password'><br/>");
    out.write("<input type='submit' value='login'>");
    out.write("</form>");
}

0
投票

另一种无需 Thymeleaf 即可响应 HTML 页面的方法

@GetMapping("/home")
public String loadHomePage() {
    Resource resource = new ClassPathResource("templates/html/home.html");
    try {
        InputStream inputStream = resource.getInputStream();
        byte[] byteData = FileCopyUtils.copyToByteArray(inputStream);
        String content = new String(byteData, StandardCharsets.UTF_8);
        LOGGER.info(content);
        return content;
    } catch (IOException e) {
        LOGGER.error("IOException", e);
    }
    return null;
}

0
投票

只需使用这个:

@GetMapping("/home")
public String getHome() {
    return "redirect:/home.html";
}

注意:home.html 文件应位于 src/main/resources/static/

© www.soinside.com 2019 - 2024. All rights reserved.