【问题标题】:Calling a spring Rest Controller from a Web Controller从 Web 控制器调用 spring Rest 控制器
【发布时间】:2018-07-30 13:02:28
【问题描述】:

我们正在尝试使用 spring-boot-web 和 thyme-leaf 构建一个应用程序。这就是我们目前所拥有的。

  • REST 层:-这些是将数据暴露给外部世界的@RestController API。
  • Web 层:- 这些是处理应用程序 UI 部分的 @Controller 端点。来自 UI 的任何请求都会从这一层传来,我们计划调用其余层。

这是一种正确的方法吗?如果是的话,我应该如何从 web 层调用其余层?一个想法可能是使用 REST 模板来调用 REST 层并将其视为隔离 API,但我不确定这是否是正确的方法。感觉就像是给我打了一个额外的网络电话。

【问题讨论】:

  • 为什么要从@Controller 调用@RestController?此外,“Web 层”对于您的控制器来说是一个非常具有误导性的名称。
  • 如今,在很多情况下,将 HTML 前端编写为通过 HTTP 调用相同 REST 端点的 JavaScript 应用程序更为常见。
  • @chrylis 我们的想法是我们不确定我们是否正在做一个 UI 繁重的项目来保留不同的前端应用程序。这就是我们继续开发具有简单 UI 的应用程序的原因。
  • @Kayaman 这就是我的问题所在,我想保持 REST 层独立于 UI。提交表单请求将到达另一个仅处理 UI 而不是 REST API 的控制器。这就是为什么我需要从 UI Controller 调用 Rest Controller。
  • 这就是为什么我发布这个问题想要一些相同的想法。我们如何将 UI 和 REST 部分分开?

标签: java rest spring-mvc spring-boot thymeleaf


【解决方案1】:
  1. 如果您想使用 AJAX(jquery、javascript、React、Angular)从客户端调用该端点,您只需在应用程序架构中使用 @RestController。

  2. 如果您的页面是从服务器端呈现的,并且表单是在没有 AJAX 的情况下提交的,那么您只需要 @Controller

  3. 要将您的业务逻辑与控制器(如您所说的 Web 控制器)分开,您可以引入可以从 @Controller 调用的 @Service 层。

【讨论】:

    【解决方案2】:

    Controller 不需要调用 Rest 控制器。 创建Controller和Rest Controller使用的公共服务,如果您需要REST服务以及UI。

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 2013-03-11
      • 2017-05-06
      • 2017-02-19
      • 2018-10-04
      • 2011-06-29
      • 1970-01-01
      相关资源
      最近更新 更多