【问题标题】:Spring Data Rest Custom Links on ResourceSpring Data Rest 资源上的自定义链接
【发布时间】:2016-10-31 18:01:33
【问题描述】:

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。

其他数据,如投影定义、具有 ID 的类等,如预期的那样存在于注入的 RepositoryRestConfiguration 中。那么为什么这些查找我会得到 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。

【问题讨论】:

    标签: java spring-data-rest


    【解决方案1】:

    发现可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 1970-01-01
      • 2018-07-30
      • 2017-06-21
      • 2015-11-13
      • 1970-01-01
      • 2015-11-29
      • 2023-04-09
      • 2018-04-26
      相关资源
      最近更新 更多