在 Spring Application 中拥有 RestController 和 Controller 的最佳实践

Posted

技术标签:

【中文标题】在 Spring Application 中拥有 RestController 和 Controller 的最佳实践【英文标题】:Best practice to have a RestController and a Controller in Spring Application 【发布时间】:2018-11-01 08:50:54 【问题描述】:

我不是在问它是否可能,我知道它是,但我想知道在我的应用程序中有前端的同时提供休息服务的最佳方式是什么。

我正在开发一个 Spring Boot 应用程序,我目前有一个调用 jsp 页面的控制器和一个 单独的 RestController。我希望能够通过 android 应用程序使用它。

那么在我的应用程序中同时拥有一个控制器和一个单独的 Restcontroller 是否正确?例如,将从 /api/* 调用 Rest 控制器方法。


编辑: 我知道两者之间的区别,但是因为我希望能够返回一个视图(而且我不应该使用 RestController 这样做)并且我想要一个休息服务,所以我想知道我是否可以同时拥有它们(当然分开)。

非常感谢您。

【问题讨论】:

请查看:***.com/a/25242458/540195 由 Amit 链接,您可以只使用一个 @Controller 并在某些方法上而不是在其他方法上添加 @ResponseBody 注释,因为 @RestController 只是 @Controller+ @ResponseBody 对于所有方法。 【参考方案1】:

我会说这是可能的,但在典型的分层 Spring 应用程序中被认为是一种不好的做法(除了 REST 应用程序中的 Swagger 控制器等极端情况)(将回到那个) 你可能想创建一个多模块项目,看起来像这样:

父项目 -- 核心 -- web api(基于jsp) -- rest api (for android)

web api 和 rest api 都依赖于核心。 web api 和 rest api 是独立的部署单元。您可以将它们部署在同一台服务器上或作为单独的应用程序运行(例如使用 spring boot)。取决于您的用例。 这样您就可以将业务逻辑集中在一个地方(核心)。

您可能还想了解ports and adapters 架构,它可能会让您了解如何以更有条理的方式解决这个问题,而不仅仅是让控制器和 RestController 并排放置

【讨论】:

以上是关于在 Spring Application 中拥有 RestController 和 Controller 的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

使用 IntelliJ 在 Spring Boot 中自定义应用程序属性

Spring Boot中application.properties和application.yml文件

无法在 Spring Boot 应用程序中读取 application.properties

组件化如何让Android Library拥有Application生命

如何在 Spring 的 Tomcat Web 服务器中外部化 application.properties?

如何在 Spring Boot 的 application.yml 中定义默认空值