我使用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>>
但我想避免这种情况,因为:
我是如何让一个ResourceProcessor也适用于我的ExcerptProjection的?
答案 0 :(得分:2)
我用我的问题创建了一个JIRA问题。
请注意https://jira.spring.io/browse/DATAREST-713
答案是Spring数据休息不能使用实体资源处理器进行投影,也需要资源处理器进行投影。
为避免代码重复,选项是引入投影和实体扩展/实现的接口。然后我们可以为这个接口实现一个资源处理器,它将同时应用于投影和实体。