【问题标题】:Excerpt Projection and Custom Links from ResourceProcessorResourceProcessor 中的摘录投影和自定义链接
【发布时间】:2015-11-03 14:31:10
【问题描述】:

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

我还实现了一个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?

【问题讨论】:

    标签: java spring spring-data-rest


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 1970-01-01
      • 2016-03-30
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多