java – 有没有办法在没有Projection的情况下在spring数据中返回带有id的关联对象

前端之家收集整理的这篇文章主要介绍了java – 有没有办法在没有Projection的情况下在spring数据中返回带有id的关联对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我使用的是spring-boot-starter-parent 1.4.1.RELEASE.

> Spring启动@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

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","address" : { 
    "street": "Bag End","state": "The Shire","country": "Middle Earth"
  },"address" : { 
      "href" : "http://localhost:8080/persons/1/address"
    }
  }
}

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

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

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

最佳答案
关于您的第一个问题,已经回答了here,exposeIdsFor接受了任意数量的参数.另外,如提到in this thread如果所有实体类都位于同一个包中,您可以使用Reflections library获取类的列表并将其提供给exposeIdsFor().
原文链接:https://www.f2er.com/spring/432082.html

猜你在找的Spring相关文章