从 ResourceProcessor 中摘录投影和自定义链接

Excerpt Projection and Custom Links from ResourceProcessor

我正在使用 spring-data-rest 2.4.1 将实体公开为休息资源。

我还实现了 ResourceProcessor 以向资源添加自定义 link

@Component
public class MyEntityResourceProcessor implements ResourceProcessor<Resource<MyEntity>> {

    @Override
    public Resource<MyEntity> process(Resource<MyEntity> resource) {
        resource.add(linkTo(methodOn(CustomController.class).getFeatures(resource.getContent().getId())).withRel("customRel"));
        return resource;
    }
}

这适用于单项资源。但我还设置了一个 ExcerptProjection 来减少集合资源中显示的属性:

@Projection(name = "myExcerptProjection", types = MyEntity.class)
interface MyExcerptProjection {

    String getName();
    String getSlogan();

}

当使用投影时,我的 MyEntityResourceProcessor 未被使用并且自定义 link 丢失。

我可以通过像这样为投影实现 ResourceProcessor 来引入 link:

public class MyEntityProjectionResourceProcessor implements ResourceProcessor<Resource<MyExcerptProjection>>

但我想避免这种情况,因为:

关于如何让一个 ResourceProcessor 也适用于我的 ExcerptProjection 的任何想法?

我用我的问题创建了一个 JIRA 问题。

请看https://jira.spring.io/browse/DATAREST-713

答案是 spring 数据 rest 不能使用实体资源处理器进行投影,您也需要资源处理器进行投影。

为了避免代码重复,一个选项是引入一个既能投影又能连接实体的接口extend/implement。然后我们可以为这个接口实现一个资源处理器,它将应用于投影和实体。