【发布时间】:2016-12-09 10:44:32
【问题描述】:
谁能帮帮我。
我的应用程序中有一些基于 Spring Data Rest 的实体和存储库。 现在我编写了自己的 HandlerInterceptor 实现来对每个请求进行预处理,并且我必须知道每个 http 请求将使用哪个存储库。
我可以为每个存储库制作单独的拦截器,但这个解决方案不灵活有什么想法吗?
谢谢提前
【问题讨论】:
标签: spring-data-rest
谁能帮帮我。
我的应用程序中有一些基于 Spring Data Rest 的实体和存储库。 现在我编写了自己的 HandlerInterceptor 实现来对每个请求进行预处理,并且我必须知道每个 http 请求将使用哪个存储库。
我可以为每个存储库制作单独的拦截器,但这个解决方案不灵活有什么想法吗?
谢谢提前
【问题讨论】:
标签: spring-data-rest
使用 Repositories 类在 spring data-rest 中解析存储库。
repositories 类公开了一个帮助方法 (getRepositoryFor(Class<?>)),用于查找给定类的存储库。
您可以使用以下 sn-p 在拦截器中查找给定类的存储库:
Repositories repositories = new Repositories(appContext);
repositories.getRepositoryFor(entityObject.getClass());
更优雅的解决方案是利用内置的 spring-data-rest 存储库查找实现和自定义控制器 (RootResourceInformationHandlerMethodArgumentResolver)
为此,您只需将 RootResourceInformation 参数添加到 RepositoryRestController 端点方法。
@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....
}
【讨论】: