添加关联链接到 spring 数据休息自定义公开方法
adding association links to spring data rest custom exposed method
你好,我已经公开了一个自定义的@RepositoryRestController,通过Spring数据公开了一个自定义方法,其余的方法代码如下所示
@RequestMapping(method = RequestMethod.GET, value = "/foo/rsqlsearch")
public @ResponseBody PagedResources<Resource<Foos>> findAllPaged(@RequestParam(value = "rsql") String rsql, Pageable pageable) {
Page<Foo> foos= fundRepository.searchByRsql(rsql, pageable);
return pagedResourcesAssembler.toResource(foos);
}
foo 实体
@Entity
@Table(name = "FOO_TBL", schema = "F")
@Data
public class Foo implements Identifiable<String> {
@Id
@Column(name = "ID")
@Description("Id")
private String id;
// associations
@OneToMany(mappedBy = "foo", fetch = FetchType.LAZY)
private List<FooFriends> fooFriends;
@OneToMany(mappedBy = "foo", fetch = FetchType.LAZY)
private List<Marks> marks;
}
Foo 实体可以很好地呈现来自自定义存储库方法的数据。但是 json 表示不包括实体关联的链接。有没有办法让这些关联可以通过框架公开,而无需像在 spring 数据其余的其他开箱即用表示中那样编写自定义 ResourceProcessor 。
最后我通过查看一些 spring 数据剩余代码解决了这个问题。所以实现这个的想法是从 AbstractRepositoryRestController 这一节中得到的,它让我了解了如何同时使用 PersistentEntityResourceAssembler 和 pagedResourcesAssembler .
@SuppressWarnings({ "unchecked" })
protected Resources<?> toResources(Iterable<?> source, PersistentEntityResourceAssembler assembler,
Class<?> domainType, Link baseLink) {
if (source instanceof Page) {
Page<Object> page = (Page<Object>) source;
return entitiesToResources(page, assembler, domainType, baseLink);
} else if (source instanceof Iterable) {
return entitiesToResources((Iterable<Object>) source, assembler, domainType);
} else {
return new Resources(EMPTY_RESOURCE_LIST);
}
}
所以在将两者与 restm 方法中可用的 PersistentEntityResourceAssembler 一起使用后,我终于可以为我的自定义查询提供 spring 数据剩余 HAl 类型表示。下面的代码
@RequestMapping(method = RequestMethod.GET, value = "/foo/rsqlsearch")
public @ResponseBody PagedResources<?> findAllPaged(@RequestParam(value = RSQL_REL) String rsql,
Pageable pageable,
PersistentEntityResourceAssembler eass) {
Page<Object> entities = (Page<Object>) repository.searchByRsql(rsql, pageable);
return assembler.toResource(entities, eass);
}
希望对身边的人有所帮助:)
你好,我已经公开了一个自定义的@RepositoryRestController,通过Spring数据公开了一个自定义方法,其余的方法代码如下所示
@RequestMapping(method = RequestMethod.GET, value = "/foo/rsqlsearch")
public @ResponseBody PagedResources<Resource<Foos>> findAllPaged(@RequestParam(value = "rsql") String rsql, Pageable pageable) {
Page<Foo> foos= fundRepository.searchByRsql(rsql, pageable);
return pagedResourcesAssembler.toResource(foos);
}
foo 实体
@Entity
@Table(name = "FOO_TBL", schema = "F")
@Data
public class Foo implements Identifiable<String> {
@Id
@Column(name = "ID")
@Description("Id")
private String id;
// associations
@OneToMany(mappedBy = "foo", fetch = FetchType.LAZY)
private List<FooFriends> fooFriends;
@OneToMany(mappedBy = "foo", fetch = FetchType.LAZY)
private List<Marks> marks;
}
Foo 实体可以很好地呈现来自自定义存储库方法的数据。但是 json 表示不包括实体关联的链接。有没有办法让这些关联可以通过框架公开,而无需像在 spring 数据其余的其他开箱即用表示中那样编写自定义 ResourceProcessor 。
最后我通过查看一些 spring 数据剩余代码解决了这个问题。所以实现这个的想法是从 AbstractRepositoryRestController 这一节中得到的,它让我了解了如何同时使用 PersistentEntityResourceAssembler 和 pagedResourcesAssembler .
@SuppressWarnings({ "unchecked" })
protected Resources<?> toResources(Iterable<?> source, PersistentEntityResourceAssembler assembler,
Class<?> domainType, Link baseLink) {
if (source instanceof Page) {
Page<Object> page = (Page<Object>) source;
return entitiesToResources(page, assembler, domainType, baseLink);
} else if (source instanceof Iterable) {
return entitiesToResources((Iterable<Object>) source, assembler, domainType);
} else {
return new Resources(EMPTY_RESOURCE_LIST);
}
}
所以在将两者与 restm 方法中可用的 PersistentEntityResourceAssembler 一起使用后,我终于可以为我的自定义查询提供 spring 数据剩余 HAl 类型表示。下面的代码
@RequestMapping(method = RequestMethod.GET, value = "/foo/rsqlsearch")
public @ResponseBody PagedResources<?> findAllPaged(@RequestParam(value = RSQL_REL) String rsql,
Pageable pageable,
PersistentEntityResourceAssembler eass) {
Page<Object> entities = (Page<Object>) repository.searchByRsql(rsql, pageable);
return assembler.toResource(entities, eass);
}
希望对身边的人有所帮助:)