显示@RestResource(exported = false) 的关系链接

Displaying Relation Links for @RestResource(exported = false)

我正在使用 Spring Data Rest 和 Spring 启动,我遇到了一些奇怪的情况。

到目前为止我们尝试的是创建一个投影,其中添加了 getXXX() 的非关系属性,然后使用 ResourceProcessor 来处理 links,如 ,但我们似乎无法让它工作

问:这是解决这个问题的最佳方法吗?我们如何像普通资源一样将 links 添加到投影中?

更新 所以这是我的投影 class

@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;
}
}

但这不起作用,这只是将 link 添加到 /rates 作为资源而不是子资源

EntityLinks 不知道您要生成的子资源 link - 因此您获得默认的顶级 link。

我假设您没有此子资源的自定义控制器?!如果你不这样做 spring-data-rest 在这种情况下将不会公开子资源 - 因为关系的目标不是 exported.

在这种情况下,您需要一个自定义控制器来公开此子资源。如果你走这条路,你应该使用 ControllerLinkBuilder 来构建这个 link。如果你想坚持使用 EntityLinks,你可以执行以下操作(对于 link,你需要 id - 要获得它,它需要在投影上可用):

fullSPResource.add(entityLinks.linkForSingleResource(SP.class, fullSPResource.getContent().getId()).slash("rates").withRel("rates"));