如何在Spring Data Rest中隐藏_embedded实体字段

时间:2019-10-26 16:59:16

标签: java spring spring-boot spring-data-rest spring-boot-gradle-plugin

我运行基于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"
    }
  }
}

没有证据,我认为有以下缺点:

  1. 它大大增加了响应大小。我可以理解,在某些情况下需要这些附加数据,但是在这种情况下,我更喜欢根据需要通过手工制作Projections来手动公开它。
  2. 为了收集额外公开的数据,需要进行其他数据库事务,这会对性能产生负面影响。
  3. 默认情况下,必须公开更多公共API。再次,我更愿意使用Projections来尽可能减少响应。

这是我的问题:

  1. 是否可以还原以前的API格式,例如定制新功能还是完全将其关闭?
  2. 我想知道设计的目的是什么。鉴于上述缺点,新功能具有哪些优势?

1 个答案:

答案 0 :(得分:1)

原来是Spring Data Rest bug。版本2.2.1.RELEASE包含一个修复程序,可以恢复通常的行为。