【发布时间】:2019-10-26 16:59:16
【问题描述】:
我运行基于Spring Boot Gradle Plugin 的 SDR 应用程序。我最近从2.1.9.RELEASE 升级到2.2.0.RELEASE。在没有 100% 确定这就是原因的情况下,SDR 现在似乎为每个资源公开了一个额外的 _embedded 字段。新字段包含相关实体的数据。
例如,这是一个以2.1.9.RELEASE 公开的资源:
{
"uuid": "77315176-cb4f-4126-8e8b-9007457a7ce1",
"name": "root",
"_links": {
"self": {
"href": "localhost/users/1"
},
"user": {
"href": "localhost/users/1"
},
"group": {
"href": "localhost/users/1/group"
}
}
}
与2.2.0.RELEASE 暴露的相同资源:
{
"uuid": "77315176-cb4f-4126-8e8b-9007457a7ce1",
"name": "root",
"_embedded": {
"group": {
"uuid": "be43382c-7b03-4d28-9597-7284986f700b",
"name": "admin"
}
},
"_links": {
"self": {
"href": "localhost/users/1"
},
"user": {
"href": "localhost/users/1"
},
"group": {
"href": "localhost/users/1/group"
}
}
}
如果没有证据,我假设有以下缺点:
- 它大大增加了响应大小。我可以理解在某些用例中需要这些额外的数据,但是,在这种情况下,我更喜欢根据需要通过手工制作 Projections 来手动公开它。
- 为了收集额外暴露的数据,需要额外的数据库事务,这会对性能产生负面影响。
- 默认公开更多公共API,必须维护。同样,我更喜欢使用Projections,以便尽可能减少响应。
这是我的问题:
- 是否可以恢复以前的 API 格式,例如自定义新功能还是将其完全关闭?
- 我想知道这个设计的目的是什么。鉴于上述假设的缺点,新功能有哪些优势?
【问题讨论】:
-
请同时包含 user 和 userRepository 类。
-
您的问题是否与几周前的问题相同并且已创建错误报告? stackoverflow.com/questions/58213756/…
-
我无法发布
user和userRepository,因为它们不存在。我发布了一些示例数据来指出问题。我考虑过制作和发布缺失的课程,但我认为不再需要,因为@AlanHay 已经提出了一个很好的方向。 -
@AlanHay,请发布带有 JIRA 票证链接的答案,以便我接受,或者我们也可以将这个问题作为副本关闭。
标签: java spring spring-boot spring-data-rest spring-boot-gradle-plugin