我使用Spring Data Rest和Spring启动,我有点奇怪的情况。
我们需要我们的客户能够在一个JSON对象中发布一个具有所有关系的资源,因此我们将关系设为@RestResource( exported = false)
,这是我们能找到的唯一解决方案,我们失去了链接
我们现在正尝试创建此资源的投影,其所有关系显示为链接
我们到目前为止尝试的是创建一个投影,其中非关系属性添加了getXXX()
,然后使用ResourceProcessor
来处理this question中的链接,但我们不能似乎让它工作
更新 所以这是我的投影课
@Projection(name = "fullSP", types = {SP.class})
public interface FullSP {}
这是我的处理器
@Component
public class FullSPResourceProcessor implements ResourceProcessor<Resource<FullSP>> {
private final EntityLinks entityLinks;
@Autowired
public FullSPResourceProcessor(EntityLinks entityLinks) {
this.entityLinks = entityLinks;
}
@Override
public Resource<FullSP> process(Resource<FullSP> fullSPResource) {
FullSP fullSP= fullSPResource.getId();
fullSPResource.add(entityLinks.linkFor(Rate.class).withRel("rates"));
return fullSPResource;
}
}
但这不起作用,这只是添加/ rate作为资源而不是作为子资源的链接
答案 0 :(得分:0)
EntityLinks不了解您要生成的子资源链接 - 因此您将获得默认的顶级链接。
我假设你没有这个子资源的自定义控制器?!如果你没有弹簧 - 数据休息在这种情况下不会暴露子资源 - 因为关系的目标不是exported
。
在这种情况下,您需要一个自定义控制器来公开此子资源。如果你走这条路线,你应该使用ControllerLinkBuilder
建立这个链接。如果您想坚持EntityLinks
,您可以执行以下操作(对于您需要id的链接 - 要获得它,它需要在投影上可用):
fullSPResource.add(entityLinks.linkForSingleResource(SP.class, fullSPResource.getContent().getId()).slash("rates").withRel("rates"));