任何人都可以帮助我。
我的应用程序中有一些基于spring数据休息的实体和存储库。 现在我编写了自己的HandlerInterceptor实现来做preHandling每个请求,我必须知道每个http请求将使用哪个存储库。
Ofc我可以为每个存储库制作单独的拦截器,但这个解决方案不灵活任何想法?
提前预付款
答案 0 :(得分:1)
使用Repositories类在Spring数据休息中解析存储库。
repositories类公开了一个帮助器方法(getRepositoryFor(Class<?>)
),用于查找给定类的存储库。
您可以使用以下代码段在拦截器中查找给定类的存储库:
Repositories repositories = new Repositories(appContext);
repositories.getRepositoryFor(entityObject.getClass());
更优雅的解决方案是利用内置的spring-data-rest存储库查找实现和自定义控制器(RootResourceInformationHandlerMethodArgumentResolver)
为此,您只需要在RepositoryRestController端点方法中添加RootResourceInformation
参数。
@RepositoryRestController
@RequestMapping("/customName")
public class RepositoryExportController {
@Autowired
private ApplicationContext appContext;
@RequestMapping(method = RequestMethod.GET, value = "{repository}",
produces = MediaTypes.HAL_JSON_VALUE)
@ResponseBody
public Resources<Resource<?>> export(RootResourceInformation resourceInformation, ...) {
Repositories repositories = new Repositories(appContext);
CrudRepository repo=(CrudRepository)repositories.getRepositoryFor(resourceInformation.getDomainType());
repo.findAll();
...other logic....
}