Spring Data REST 默认对 JSON 隐藏技术实体字段(@Version、@Id)。如何将它们作为通常的属性返回?
Posted
技术标签:
【中文标题】Spring Data REST 默认对 JSON 隐藏技术实体字段(@Version、@Id)。如何将它们作为通常的属性返回?【英文标题】:Spring Data REST hides technical entity fields (@Version, @Id) from JSON by default. How to return them as usual properties? 【发布时间】:2018-05-22 21:41:45 【问题描述】:我有一个基类
@MappedSuperclass
@Data //lombok annotation for getters/setter
public class BaseEntity implements Identifiable<Long>
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Version
private Long version;
对于任何派生类,Spring Data REST 返回没有“id”和“version”属性的 JSON。
我找到了 2 个解决方案:
-
预测。
添加其他名称的 getter/setter:
public Long getRevision()
return version;
public void setRevision(Long revision)
this.version = revision;
public Long getIdentifier()
return id;
public void setIdentifier(Long identifier)
this.id = identifier;
这两种解决方案看起来都像 hack。是否存在更好的方法?
【问题讨论】:
公开 ids 已解决和回答 here, here, here, here...公开版本已解决 here。 感谢您发布您的 MappedSuperclass 代码,它帮助我弄清楚我没有向它添加 Data 注释,即使它是针对我的实体类注册的。截至 2020 年 3 月,这就是我需要添加的全部内容,不需要所有其他“exposeIds”技术,它们(不出所料)也没有解决我的问题。 【参考方案1】:显示实体的ID是在RepositoryRestConfigurerAdapter
中配置的:
@Bean
public RepositoryRestConfigurerAdapter repositoryRestConfigurerAdapter()
return new RepositoryRestConfigurerAdapter()
/**
* Exposing ID for some entities
*/
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config)
config.exposeIdsFor(MyEntity.class);
super.configureRepositoryRestConfiguration(config);
;
【讨论】:
谢谢!那么@Version 呢? 我认为您不需要它 - JPA 提供程序直接使用它... 我想对嵌套资源应用乐观锁定。如果没有版本,我只能将 If-Match 应用于***资源。以上是关于Spring Data REST 默认对 JSON 隐藏技术实体字段(@Version、@Id)。如何将它们作为通常的属性返回?的主要内容,如果未能解决你的问题,请参考以下文章
Jason中的Spring Data Rest -Disable自我链接(HAL)
spring-data-rest 集成测试因简单的 json 请求而失败
纯 JSON(非 HAL 格式)的 Spring Data REST
Spring Data REST 在哪里构建异常 JSON 回复?