有没有办法在没有投影的情况下在春季数据休息中返回带有 id 的关联对象

Posted

技术标签:

【中文标题】有没有办法在没有投影的情况下在春季数据休息中返回带有 id 的关联对象【英文标题】:Is there a way to return association objects with id in spring data rest without Projection 【发布时间】:2017-02-28 14:56:08 【问题描述】:

我正在使用 spring-boot-starter-parent 1.4.1.RELEASE。

    Spring boot @ResponseBody 默认不序列化实体ID。

如果我使用exposeIdsFor 返回id,但我需要为每个类配置它

例如

RepositoryRestConfiguration.exposeIdsFor(User.class); RepositoryRestConfiguration.exposeIdsFor(Address.class);

有没有更简单的配置来做到这一点,而无需配置每个实体类。

参考:https://jira.spring.io/browse/DATAREST-366

    REST 资源会将属性呈现为其对应关联资源的 URI。我们需要返回关联的对象而不是 URI。

如果我使用 Projection,它将返回关联的对象,但我需要为每个类配置它

例如

@Entity
public class Person 

  @Id @GeneratedValue
  private Long id;
  private String firstName, lastName;

  @ManyToOne
  private Address address;
  …

PersonRepository:

interface PersonRepository extends CrudRepository<Person, Long> 

PersonRepository 返回,


  "firstName" : "Frodo",
  "lastName" : "Baggins",
  "_links" : 
    "self" : 
      "href" : "http://localhost:8080/persons/1"
    ,
    "address" : 
      "href" : "http://localhost:8080/persons/1/address"
    
  

我的投影:

@Projection(name = "inlineAddress", types =  Person.class ) 
interface InlineAddress 

  String getFirstName();

  String getLastName();

  Address getAddress(); 

添加投影后,返回..


  "firstName" : "Frodo",
  "lastName" : "Baggins",
  "address" :  
    "street": "Bag End",
    "state": "The Shire",
    "country": "Middle Earth"
  ,
  "_links" : 
    "self" : 
      "href" : "http://localhost:8080/persons/1"
    ,
    "address" :  
      "href" : "http://localhost:8080/persons/1/address"
    
  

如果其他一些类将关联作为地址,那么我还需要为这些类添加投影。

但我不想为每个类进行配置。如何实现动态投影?这样我的所有实体都会返回嵌套对象作为响应。

参考:https://jira.spring.io/browse/DATAREST-221

【问题讨论】:

【参考方案1】:

关于您的第一个问题,here 已经回答,exposeIdsFor 接受任意数量的参数。此外,正如 in this thread 所提到的,如果您的所有实体类都位于同一个包中,您可以使用 Reflections library 获取您的类列表并将其提供给 exposeIdsFor()。

【讨论】:

好的。我已经尝试过这个......它工作正常......这是在所有实体的响应中返回 id 的唯一方法吗?? 我们不能暴露Ids,因为负责配置的类不知道我们插入应用程序的依赖包。还有另一种方法来包含嵌套对象的 id 吗?

以上是关于有没有办法在没有投影的情况下在春季数据休息中返回带有 id 的关联对象的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在没有 VBA 的情况下在 Excel 中连接两个数组? [复制]

有没有办法在没有插件的情况下在结帐完成之前上传图片?

有没有办法在不使用 AVFoundation 框架的情况下在 iOS 中录制音频?

春季安全+休息不起作用

有没有办法在不使用用户定义函数的情况下在 SQL 中动态执行查询?

春季数据休息