摘自ResourceProcessor

时间:2015-11-03 14:31:10

标签: java spring spring-data-rest

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

我还实施了ResourceProcessor来添加资源的自定义链接

@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,并且缺少自定义链接。

我可以通过为投影实现ResourceProcessor来引入链接,如下所示:

public class MyEntityProjectionResourceProcessor implements ResourceProcessor<Resource<MyExcerptProjection>>

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

  • 是代码重复
  • 我错过了投影中的实体ID,因此我无法生成链接

我是如何让一个ResourceProcessor也适用于我的ExcerptProjection的?

1 个答案:

答案 0 :(得分:2)

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

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

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

为避免代码重复,选项是引入投影和实体扩展/实现的接口。然后我们可以为这个接口实现一个资源处理器,它将同时应用于投影和实体。