你可以在 Spring Boot 中为多个模型设置一个控制器吗?

Posted

技术标签:

【中文标题】你可以在 Spring Boot 中为多个模型设置一个控制器吗?【英文标题】:Can you set a controller for multiple models in Spring boot? 【发布时间】:2022-01-17 09:10:17 【问题描述】:

所以我尝试将 cmets 添加到 3 个不同的模型(电影、导演和演员的评论都外键为其 id),但感觉创建模型、控制器、服务和他们每个人的存储库,最简单的方法是为每个人创建一个新的评论模型并将它们全部放入一个控制器并从那里开始工作。那可能吗?或者有没有更有效的方法通过单一模型来做到这一点?这似乎是不可能的,因为它们被设置为多对一的关系。我只是想确保这不是不好的做法或类似的事情,我只是不想有那么多感觉重复的额外代码。任何人都可以对此提出一些建议吗?谢谢!

【问题讨论】:

好吧,如果评论结构相同,我认为对所有模型(电影、导演和演员)使用相同的 Comment 实体/表是个好主意.但是,如果 cmets 可能不同(电影 cmets != 导演 cmets,具有许多不同的属性),那么也许您应该选择不同的实体/表。这实际上取决于您,在这一点上我想说没有“好”或“坏”的做法,只是可以讨论的选择。 cmets 将完全相同,它们之间的唯一区别是电影 cmets 与电影 id 多对一,导演 cmets 与导演 id 等。我不知道如何建立一个可以做类似事情的模型,并且能够根据不同的 id 对多个实体进行多对一设置。希望这是有道理的 由于评论结构相同,您可以创建评论实体并使用具有键(movieId,commentId),(directorId,commentId)的表来解决多对多映射 【参考方案1】:

也许将 cmets 的 POST 合并到一个端点中可以这样实现:

@PostMapping("/targetType/targetTypeId/comments")

其中 targetType 可以是“电影”、“导演”或“演员”,而 targetTypeId 指的是评论应该链接到的确切实例。

在评论数据库表中,需要有一列 TYPE_ID 指示评论所指的三种目标类型中的哪一种,还有一列 TYPE_INSTANCE_ID 指向电影、导演或演员。

| COMMENT table columns |
| ID | TYPE_ID | TYPE_INSTANCE_ID | COMMENT |

【讨论】:

这很有意义,谢谢你的例子!我会试一试,看看它是如何工作的,它似乎应该做我正在寻找的。​​span>

以上是关于你可以在 Spring Boot 中为多个模型设置一个控制器吗?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在 Gradle 中为 Spring Boot 应用程序设置主类?

如何在 GET 方法中为 Spring Boot 控制器类传递多个路径变量?

如何在 Spring Boot 中为 Spring LDAP 身份验证设置覆盖 BindAuthenticator handleBindException

`NativeWebRequest` 在使用 Spring Boot 的传入请求中为空

如何从 facebook/google/... oauth2 身份验证在 Spring (Boot) 中为单页应用程序派生自定义登录令牌?

如何在 IntelliJ IDEA 中为 Spring Boot 项目构建 jar 工件