按类型和名称获取实体投影



我需要使用自定义休息控制器,但我想传递投影以用作参数,就像它处理弹簧数据休息一样。

现在,当我想使用特定投影时,我知道如何使用投影工厂创建投影:

projectionFactory.createProjection(IPaymentMethodConfig.class, pm)

有没有办法使用投影定义中的名称和类型检索投影?例如,下面是投影定义:

@Projection(name = "list", types = {PaymentMethod.class})

我想创建与上面相同的投影,但改用这样的代码:

projectionFactory.createProjection(projName, PaymentMethod.class, myObject)

您应该能够使用PersistentEntityProjector执行此操作。然后只需使用Object project(Object source)方法。投影定义应可通过getProjectionConfiguration()方法从RepositoryRestConfiguration中检索。

Daniel 已经总结了它,所以我将展示相关的代码。

在类中注入RepositoryRestConfiguration类型的 bean:

import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
...
private final RepositoryRestConfiguration repositoryRestConfiguration;
...

然后使用所需的源类型和投影名称调用getProjectionConfiguration().getProjectionType(...)

private Class<?> getProjectionType(Class<?> sourceType, String projection) {
return repositoryRestConfiguration.getProjectionConfiguration().getProjectionType(sourceType, projection);
}

因此,在您的示例中:

Class<?> projectionType = getProjectionType(PaymentMethod.class, projName);

最新更新