SpringBoot中一个简单的REST项目是否使用了MVC原理?

Does a simple REST project in Spring Boot use the MVC principle?

我需要创建一个使用模型-视图-控制器原则和 MySQL 数据库的简单项目。我想使用 Spring Boot with Spring MVC 和 Spring Data JPA。

我想发出调用数据库的 GET、POST、PUT 和 DELETE 请求并向客户端发送 JSON。

@GetMapping(value = "/users")
public Users getUsers() {
   // call the service -> call the database
}

响应将是:

{
  "name": "John",
  "age": 45,
  ...
}

本项目是否采用了MVC原理?还是需要用一个.jsp让view有完整的MVC原理?

所以控制器是 REST 控制器,模型是用户 POJO。如果这个项目使用 MVC 原理,谁能解释一下视图在哪里?

如果服务调用存储库并从 MySQL 数据库中获取数据,我想知道是否通过添加 DAO 修改了 MVC,或者 DAO 是模型的一部分?

MVC 是应用程序层的架构设计模式。这正是关于您的应用程序的内部工作。

REST 是您的应用程序如何与其他应用程序交互。

您可以将它们组合在一个应用程序中。

一般来说,它们是针对不同问题的不同模式:

MVC 您正在接收请求 -> 处理它(从数据库中获取数据或通过某些方式)-> 将其呈现给视图 -> 并使用请求的数据进行查看 return 给来电者。

REST (Re演示 State Transfer) 流程非常相似。但是,不是 return 查看数据 -> 您的应用仅发送数据的表示形式。响应的内容类型应由调用者在请求时指定。

现在从你问题的其他部分开始。 (也许,一个问题答不上来,甚至问题太多了)

Does this project use the MVC principle? Or do I need to use a .jsp file for the view to have a complete MVC principle?

从您已经分享的片段中 - 您使用了 REST - 以及您的方法 return JSON 资源表示。

目前看来这是您想要实现的预期目标:

And I want to make GET, POST, PUT and DELETE requests that call the database and send a JSON to the client.

如果您想使用 MVC,则必须 return 使用获取的数据渲染视图。请记住,在这种情况下,您必须 return HTML 呼叫呼叫者:

@Controller 
@RequiredArgsConstructor
public class ControllerDemo {
    private final UserService userService;

    @GetMapping(value = "/users")
    public String getAllUsers(Model model) { 
       // add fetched data to model as attribute
       model.addAtribute("users", userService.findAll());
       // view resolver should be configured to render response to `response-page.ftl` for example
       return "response-page"; 
    }

使用 JSP 或 Freemarker or Mustache 等并不重要 - 主要思想是您创建模板,来自数据库的数据将根据 [=66 上的此模板表示=]HTML 页.


So the Controller is the REST Controller and the Model is the Users pojo. And if this project use the MVC principle can somebody explain where is the view? - 使用 REST 方法是没有视图,在这种情况下的响应是资源的表示。


And if the service calls the repository and fetch the data from the MySQL database I want to know if the MVC is modified by adding the DAO, or the DAO is a part of the Model?

DAO代表数据访问层。您有一个模型 - User class 描述您的实体。并且您将一些用户实体存储在 DB 中。并且您想接收已经存储的所有用户(在现实生活中您需要分页,但为了简单起见,我们将其省略)。

因此,为了做到这一点,您必须逐行查找 users table 并将行从 DB 转换为 User 实体。你把这个检索到单独的数据层 - DAO.
DAO 不是 Model 的一部分,它是 [=66 之间的独立层=]模型DB.

你不能在你的服务层(UserService)这样做,因为它会破坏简单责任原则SOLID Principles) 对于服务层——做好一件事情,做好。

同时您支持部分应用程序的高内聚性 (GRASP Principles)

MVC 是实现 UI 的模式。因此,如果您只是开发 REST API,则不会涉及 UI,因此您无需担心它是否作为 MVC 实现。

相反,如果您正在开发 Web 应用程序,则视图是将 HTML 代码呈现给浏览器的技术。通常它们只是一个模板引擎,例如 JSP 、FreeMarker 或 Thymeleaf,它们允许您使用它们的表达式语言来访问某些 Java 对象(即 Model)中的数据以定义 HTML 您要生成为模板的代码。

在 Spring MVC 中,您需要使用 @RestController 来开发 REST API 而 @Controller 用于 Web 应用程序。主要区别在于 @RestController 包含 @ResponseBody,这将 by-pass 视图解析过程,因为 REST API.

中没有视图

简而言之,由于您现在正在开发 REST API,所以没有 UI 也没有视图。所以这里不适用MVC,你不用担心是不是基于MVC实现的。

And if the service calls the repository and fetch the data from the MySQL database I want to know if the MVC is modified by adding the DAO, or the DAO is a part of the Model?

DAO 是一个对象,负责从数据库中获取和管理数据。与型号无关。