我需要使用自定义休息控制器,但我想传递投影以用作参数,就像它处理弹簧数据休息一样。
现在,当我想使用特定投影时,我知道如何使用投影工厂创建投影:
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);