Spring Boot 中的简单 REST 项目是否使用 MVC 原则?



我需要创建一个使用模型-视图-控制器原理和MySQL数据库的简单项目。我想将Spring Boot与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才能使视图具有完整的 MVC 原则?

因此,控制器是 REST 控制器,模型是用户 POJO。如果这个项目使用MVC原则,有人可以解释视图在哪里吗?

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

MVC是应用程序层的体系结构设计模式。它完全是关于应用程序的内部工作。

REST是应用程序与其他应用程序交互的方式。

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

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

MVC您正在接收请求 ->处理它(从数据库获取数据或通过某些方式获取数据) ->将其呈现到视图 -> 并将请求数据的视图返回给调用方。

REST(RepresentationalStateTransfer)流程非常相似。但是,应用不会返回包含数据的视图 ->而是仅发送数据的表示形式。响应的内容类型应由调用方根据请求指定。

现在按问题的其他部分进行。(也许,仅仅一个问题就太多了,无法正确回答它们)

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- 并且您的方法返回资源的JSON表示形式。

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

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

如果要使用 MVC,则必须返回包含提取数据的呈现视图。请记住,在这种情况下,您必须将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或Mustache等都没有关系 - 主要思想是您创建模板,并且来自DB的数据将根据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类来描述您的实体。您将一些用户实体存储在数据库中。并且您希望接收已存储的所有用户(在现实生活中您需要分页,但为简单起见,我们省略了它)。

因此,为此,您必须逐行访问users表,并将行从DB转换为User实体。您将此检索带到单独的数据层 -DAO.
DAO不是模型的一部分,它是模型数据库之间的独立层。

你不能在你的服务层(UserService)做到这一点,因为它会阻止服务层的简单责任原则(SOLID原则) - 做一个工作并把它做好。

同时,您支持应用程序各部分的高内聚力(GRASP 原则)

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

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

在Spring MVC中,你需要使用@RestController来开发REST API,同时@Controller用于Web应用程序。主要区别在于@RestController包括将绕过视图解析过程的@ResponseBody,因为 REST API 中没有视图。

简而言之,由于您现在正在开发 REST API,因此没有 UI 也没有视图。因此,MVC 在这里不适用,您无需担心它是否基于 MVC 实现。

如果服务调用存储库并从 MySQL 数据库我想知道是否通过添加 DAO,还是DAO是模型的一部分?

DAO 是一个负责从数据库获取和管理数据的对象。这与模型无关。

最新更新