Spring Data Rest 自定义链接资源

4
Spring Data Rest仓库注明可以将自定义链接添加到实体中,如下所示: http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_the_resourceprocessor_interface 给出的例子:
@Bean
public ResourceProcessor<Resource<Person>> personProcessor() {

   return new ResourceProcessor<Resource<Person>>() {

     @Override
     public Resource<Person> process(Resource<Person> resource) {

      resource.add(new Link("http://localhost:8080/people", "added-link"));
      return resource;
     }
   };
}

显然,硬编码是不好的,那么我如何编写这样的组件,以便可以动态获取应用程序中另一个资源的路径?

显而易见的解决方案似乎是注入RepositoryRestConfiguration的实例。然而,在注入的配置上进行的所有查找在此区域返回null,尽管该存储库已公开并且为此资源工作。

注入的RepositoryRestConfiguration中存在其他数据,例如投影定义、具有ID的类等。所以为什么这些查找会返回null?

@Component
public class CaseResourceProcessor implements ResourceProcessor<Resource<Case>>
{
  @Autowired
  private RepositoryRestConfiguration configuration;

  @Override
  public Resource<Case> process(Resource<Case> resource)
  {
    //null
    configuration.getResourceMappingForDomainType(Submission.class).getPath();

    //null
    configuration.getResourceMappingForRepository(SubmissionRepository.class).getPath();

    resource.add(new Link("...."));

    return resource;
  }
}

这个领域的许多代码已经被弃用,但是目前还不清楚应该使用什么代替(虽然我希望弃用的代码仍然可用)。

因此,我该如何以编程方式发现特定实体或存储库的URL。

1个回答

7
发现可以按以下方式完成:
@Component
public class CaseResourceProcessor implements ResourceProcessor<Resource<Case>>
{
  @Autowired
  private RepositoryRestMvcConfiguration configuration;

  @Override
  public Resource<Case> process(Resource<Case> resource)
  {
    LinkBuilder link = configuration.entityLinks().linkForSingleResource(Submission.class,
        resource.getContent().getLatestSubmission().getId());

    resource.add(link.withRel("latestSubmission"));

    return resource;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接