【问题标题】:Are template engines (i.e. Thymeleaf) necessary for Spring Boot applications?Spring Boot 应用程序是否需要模板引擎(即 Thymeleaf)?
【发布时间】:2021-12-14 19:09:22
【问题描述】:

我目前正在开发一个 Spring Boot 项目,而且我对模板引擎还很陌生。这也将是我第一个使用 Spring Boot 的私人项目。

我想知道在使用 Spring Boot 开发 Web 应用程序时是否需要包含模板引擎,例如 Thymeleaf。我正在为数据库使用 PostegreSQL。

我在另一篇文章中读到,如果后端框架使用 JSON 进行数据交换,则不需要模板引擎,因为模板引擎用于将检索到的数据呈现为客户端的 HTML。我从数据库中检索 JSON 对象,那么我可以将模板引擎排除在我的项目之外吗?

如果需要更多详细信息,请在下方留言。

【问题讨论】:

    标签: spring-boot thymeleaf template-engine


    【解决方案1】:

    不,它们不是必需的,事实上大多数需要网页的新项目现在都使用单页应用程序,例如 Angular、React、Vue、... 而不是 thymeleaf 或 jsp。 p>

    除此之外,Spring 项目并不总是需要网页,例如,当您只是创建 REST API 以供其他应用程序调用时,或者当您正在自动化诸如:邮件服务/打印/.. .你的名字。

    但是,如果您确实想要一个简单的解决方案,其中包含一些不是那么动态或复杂的页面,pivot/VMware 确实建议使用 thymeleaf(而不是 jsp 和其他解决方案),因为它易于集成。

    【讨论】:

      【解决方案2】:

      我在另一篇文章中读到,如果后端框架使用 JSON 进行数据交换,则不需要模板引擎,因为模板引擎用于将检索到的数据呈现为客户端的 HTML。我从数据库中检索 JSON 对象,那么我可以将模板引擎排除在我的项目之外吗?

      这部分是正确的。是的,Thymeleaf 等主要用于将数据呈现为 HTML。他们可以渲染任何文本数据,包括 JSON,但也有更适合这项工作的工具。另一方面,您如何将数据存储在数据库中或使用什么数据库并不重要。您不能只跳过渲染(序列化)响应,因此无论您如何存储它都无关紧要。重要的是您想要作为响应返回什么。对于 HTML Thymeleaf 甚至 JSP 都适合,但对于 JSON,您可能希望使用 Jackson 或 Gson。

      您没有提到您将使用的技术,因此对于我的示例,我假设您打算使用 Spring Web MVC。让我们来看看“传统”控制器:

      @Controller
      public class GreetingController {
      
          @GetMapping("/greeting")
          public ModelAndView greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
              return new ModelAndView("greeting", "greeting", new Greeting(name));
          }
      }
      

      当您向“/greeting”发出 GET 请求时,Spring 将调用 greeting 并获取它返回的对象。在这种情况下,它包含模型(我们要渲染的数据)和视图(要使用的模板文件)。然后它会尝试找到一个视图(例如 greeting.html 或 greeting.jsp)并使用 Thymeleaf 之类的模板引擎(或任何其他配置)来呈现它(通常是 HTML)。

      如果我们想返回 JSON 怎么办?在这种情况下,我们需要:

      1. 修改greeting 以返回Greeting 实例而不是ModelAndView
      2. 使用RestController 而不是Controller。这将告诉 Spring MVC 我们想要直接序列化返回为 JSON(或类似格式)的对象,而不是使用模板来执行此操作。

      这是修改后的例子:

      @RestController
      public class GreetingController {
      
          @GetMapping("/greeting")
          public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
              return new Greeting(name);
          }
      }
      

      Spring MVC 仍然需要一些帮助来将 Greeting 实例序列化为 JSON。但是如果你使用 Spring Boot 和 web starter,你就不用担心了。它将包括杰克逊。

      这绝不是详尽的答案。事实上,它跳过了很多细节,但我希望它仍然是有用的。如果你想使用 JSON 创建 REST API,这个Building a RESTful Web Service guide 是一个很好的起点。如果您按照从 Spring Initializr 开始的步骤进行操作,您将获得一个仅包含所需内容的项目设置(也许还有一些额外的内容,但我不会太担心)。

      【讨论】:

      • 这是一个很好的第一个答案,欢迎来到 SO。 +1
      猜你喜欢
      • 2023-03-22
      • 2015-09-14
      • 2016-01-26
      • 2021-02-16
      • 2020-08-27
      • 2015-08-18
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多