首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring中的简单REST项目是否使用MVC原则?

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

Stack Overflow用户
提问于 2022-04-10 10:54:33
回答 2查看 217关注 0票数 2

我需要创建一个使用原理和MySQL数据库的简单项目.我想使用Spring和Spring和。

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

代码语言:javascript
运行
复制
@GetMapping(value = "/users")
public Users getUsers() {
   // call the service -> call the database
}

对此的反应是:

代码语言:javascript
运行
复制
{
  "name": "John",
  "age": 45,
  ...
}

这个项目使用MVC原则吗?还是需要使用.jsp来实现视图的完整MVC原则?

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-30 15:51:38

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

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

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

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

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

(Representational REST State Transfer(Ransfer)流非常相似。但是,您的应用程序没有使用数据->返回视图,而是只发送数据的表示。响应的内容类型应由调用方根据请求指定。

现在一个接一个地回答你的问题。(也许,只要一个问题就能正确地回答它们,问题就太多了)

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页面返回给调用方:

代码语言:javascript
运行
复制
@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、共济会八字胡等并不重要--主要思想是创建模板,并根据HTML页面上的模板表示来自DB的数据。

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类来描述您的实体.然后在DB中存储一些用户实体。您希望接收已经存储的所有用户(在现实生活中,您需要分页,但为了简单起见,我们省略了它)。

因此,要做到这一点,您必须逐行为您的users表,并将该行从DB转换为User实体。然后将此检索用于分离数据层-- DAO

DAO不是Model的一部分,它是ModelDB之间的独立层。

您不能在您的服务层(UserService)上这样做,因为它会阻止服务层的简单责任原则 (固体原理) --完成一项工作并做好它。

同时,您支持为应用程序的某些部分提供高内聚力(把握原则 )。

票数 3
EN

Stack Overflow用户

发布于 2022-05-02 04:16:57

MVC是实现UI的模式。因此,如果您只是在开发REST,则不涉及UI,因此不需要考虑它是否作为MVC实现。

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

在Spring中,您需要使用@RestController来开发REST,而@Controller用于web应用程序。主要的区别是@RestController包含@ResponseBody,因为REST中没有视图,它将通过视图解析过程传递。

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

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

DAO是一个负责从DB获取和管理数据的对象。这和模特儿无关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71815901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档