Ala*_*Hay 3 java spring-data-rest
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;
}
};
}
Run Code Online (Sandbox Code Playgroud)
显然硬编码很糟糕,那么如何编写可以动态获取应用程序中其他资源路径的组件呢?
显而易见的解决方案似乎是注入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;
}
}
Run Code Online (Sandbox Code Playgroud)
这个领域的大部分代码都被弃用了,但是不清楚究竟应该使用什么代码(尽管我希望不推荐的代码能够起作用).
从本质上讲,我如何以编程方式发现特定实体或存储库的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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |