2017-03-02 103 views
1

在我的Spring Data Rest应用程序中,当定义了excerptProjection时,@JsonBackReference被忽略。使用摘录投影时忽略@JsonBackreferenceProject

当调用GET /foos/{id}我得到的回应:(_link元素都在这里省略)

{ 
    "text": "Foo", 
    "additionalText": "Additional Text", 
    "bar": { 
    "text": "Bar", 
    "_embedded": { 
     "foo": { 
     "text": "Foo", 
     "bar": { 
      "text": "Bar" 
     } 
     } 
    } 
    } 
} 

考虑:

@Entity 
public class Foo { 

    @Id 
    @GeneratedValue 
    private Long id; 

    private String text; 

    private String additionalText; 

    @JsonManagedReference 
    @OneToOne(mappedBy = "foo", cascade = ALL) 
    private Bar bar; 
} 

@Entity 
public class Bar { 

    @Id 
    @GeneratedValue 
    private Long id; 

    private String text; 

    @JsonBackReference 
    @OneToOne 
    private Foo foo; 
} 

与存储库:

@RepositoryRestResource(excerptProjection = FooPublicProjection.class) 
public interface FooRepository extends CrudRepository<Foo, Long> {} 

如果我删除excerptProjection定义,我得到以下结果:

{ 
    "text": "Foo", 
    "additionalText": "Additional Text", 
    "bar": { 
    "text": "Bar" 
    } 
} 

我能做些什么来让Spring数据休息不会使自己的子节点内的Foo

回答

0

这是一个解决方案,提供您使用杰克逊(我猜你会这样做)。 在我的项目中,我用JSOG来处理我所有的循环关系。我认为它也可以解决您的问题。

@Entity 
@JsonIdentityInfo(generator = JSOGGenerator.class) 
public class Foo { 

    @Id 
    @GeneratedValue 
    private Long id; 

    private String text; 

    private String additionalText; 

    @JsonManagedReference 
    @OneToOne(mappedBy = "foo", cascade = ALL) 
    private Bar bar; 
} 

和:

@Entity 
@JsonIdentityInfo(generator = JSOGGenerator.class) 
public class Bar { 

    @Id 
    @GeneratedValue 
    private Long id; 

    private String text; 

    @JsonBackReference 
    @OneToOne 
    private Foo foo; 
} 

请注意,如果你的客户是JavaScript中,有一个补充JSOG LIB,可以解析您的JSON和自动解决周期。