Spring 资源上的数据剩余自定义链接
Spring Data Rest Custom Links on Resource
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 实例,但是在该区域中对注入配置的所有查找 return 为 null,即使存储库已公开并正在为该资源工作。
其他数据,如投影定义、类 和 ID 等,如预期的那样存在于注入的 RepositoryRestConfiguration 中。那么,为什么我在这些查找中得到的是空值?
@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。
发现可以这样操作:
@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;
}
}
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 实例,但是在该区域中对注入配置的所有查找 return 为 null,即使存储库已公开并正在为该资源工作。
其他数据,如投影定义、类 和 ID 等,如预期的那样存在于注入的 RepositoryRestConfiguration 中。那么,为什么我在这些查找中得到的是空值?
@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。
发现可以这样操作:
@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;
}
}