在spring数据休息序列化时获取延迟对象

Ked*_*ikh 2 spring json hibernate spring-data spring-data-rest

我有一个实体A,它有一些属性,并引用另一个实体B.

A{
....
   @ManyToOne(fetch=FetchType.LAZY)
   B b;
...
}
Run Code Online (Sandbox Code Playgroud)

对于B(B中的A的@onetomany)也是如此.它是一种双向关系.在为实体A调用Web服务时,它提供了对B实体的链接,而不是响应json中的整个对象.我希望Web服务响应JSON中的整个对象而不是链接到该相关实体.我怎样才能做到这一点?我使用springboot + spring数据jpa + hibernate作为jpa提供者+ spring 4

nKo*_*ito 6

为了在输出JSON中嵌套相关对象,您必须使用投影.

public class User {
   private String name;
   private Address address;
}

public class Address {
   private String street;
}

public interface UsersRepository extends JpaRepository<User, Long> {
   // Custom methods
}
Run Code Online (Sandbox Code Playgroud)

会给你

{
   "name": "John",
   "_links": {
      "self": "http://localhost:8080/users/1",
      "address": "http://localhost:8080/addresses/1"
   }
}
Run Code Online (Sandbox Code Playgroud)

但投影:

@Projection(name = "inlineAddress", types = { User.class })
public interface UserInlineAddressProjection {
   String getName();
   Address getAddress();
}

@RepositoryRestResource(excerptProjection = UserInlineAddressProjection.class)
public interface UsersRepository extends JpaRepository<User, Long> {
   // Custom methods
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

{
    "name": "John",
    "address": {
       "street": "Stormtroopers str. 1"
    },
    "_links": {
       "self": "http://localhost:8080/users/1",
       "address": "http://localhost:8080/addresses/1"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是您实现它的唯一方法