根据How to correctly use PagedResourcesAssembler from Spring Data?中的一些建议,我创建了一个控制器来处理实体的一些自定义查询请求。这些类看起来像:
@BasePathAwareController
public class FooController implements ResourceProcessor<RepositorySearchesResource> {
@Autowired
FooRepo repo;
@RequestMapping("/foo/search/findFooByAttribute")
public ResponseEntity<PagedResources<Resource<Foo>>> findByAttribute(
PersistentEntityResourceAssembler entityAssembler) {
Page<Foo> results = repo.findAll(
Specifications.where(FooSpec.isOpen()),
new PageRequest(1, 20));
return new ResponseEntity<PagedResources<Resource<Foo>>>(
resourceAssembler.toResource(results),
HttpStatus.OK);
}
@Override
public RepositorySearchesResource process(
RepositorySearchesResource resource) {
...
}
}
其中FooRepo
是使用@RestResource
注释的存储库接口。如果对/foo
(默认的findAll)执行GET操作,则端点能够在序列化过程中检索Foo实体上的@OneToMany
集合映射。但是在我的自定义存储库中,我得到了着名的could not initialize proxy - no Session
异常。如何使我的自定义控制器的行为与@RestResource
似乎创建的关于保持Hibernate会话打开的生成的控制器的行为相同?