如何使用 Spring Data Rest 公开 resourceId

Posted

技术标签:

【中文标题】如何使用 Spring Data Rest 公开 resourceId【英文标题】:How to expose the resourceId with Spring Data Rest 【发布时间】:2016-04-30 14:45:03 【问题描述】:

我必须在实体中公开带有@Id 注释的主键。ID 字段仅在资源路径上可见,而在 JSON 正文上不可见。

【问题讨论】:

Spring boot @ResponseBody doesn't serialize entity id的可能重复 【参考方案1】:

您可以在实体级别使用RepositoryRestConfigurerAdapter 进行配置。

@Configuration
public class ExposeEntityIdRestConfiguration extends RepositoryRestConfigurerAdapter 

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) 
        config.exposeIdsFor(MyEntity.class);
    

请注意,使用这个您违反了 spring-data-rest 的原则 - sdr 通过使用链接在资源之间导航来促进超媒体能够使用 API - 这里您的资源由链接标识和引用,因此不再需要 id。在您的客户端上使用 id 会将构建资源链接的复杂性推给客户端。并且客户不应该被这些知识所困扰。

【讨论】:

有没有办法一次性公开所有实体的 ID?例如在配置中设置? 如何同时为所有实体执行此操作?我们有很多这个模块不知道的包。 RepositoryRestConfigurerAdapter 现在已弃用(自 3.1 起)。通过覆盖相同的方法来实现RepositoryRestConfigurer【参考方案2】:

最好的解决方案是不使用实体的 ID,而是使用超媒体提供的链接引用。 您只需要根据 Spring Data Rest 使用的 HAL 规范解析您的 JSON。

【讨论】:

以上是关于如何使用 Spring Data Rest 公开 resourceId的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Data Rest 时公开所有 ID

默认情况下,不要使用Spring Data Rest和Jpa公开Entity类中的字段

如何配置 Spring-Data-Rest 以仅返回登录用户拥有的数据

Spring Data Rest:为扩展 Revision Repository 的 Repository 公开新端点

如何简单地添加指向 Spring Data REST 实体的链接

排除 Spring-data-rest 资源的部分字段