Java 资源上的Spring数据Rest自定义链接
Spring Data Rest存储库指出,自定义链接可以添加到实体中,如下所示: 举例如下:Java 资源上的Spring数据Rest自定义链接,java,spring-data-rest,Java,Spring Data Rest,Spring Data Rest存储库指出,自定义链接可以添加到实体中,如下所示: 举例如下: @Bean public ResourceProcessor<Resource<Person>> personProcessor() { return new ResourceProcessor<Resource<Person>>() { @Override public Resource<Person> pr
@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;
}
};
}
@Bean
公共资源处理器personProcessor(){
返回新的ResourceProcessor(){
@凌驾
公共资源流程(资源){
资源。添加(新链接(“http://localhost:8080/people“,”新增链接“);
返回资源;
}
};
}
显然,硬编码是不好的,那么如何编写这样的组件来动态获取应用程序中另一个资源的路径呢
显而易见的解决方案似乎是注入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;
}
}
@组件
公共类CaseResourceProcessor实现ResourceProcessor
{
@自动连线
私有repositoryrest配置;
@凌驾
公共资源流程(资源)
{
//空的
getResourceMappingForDomainType(Submission.class).getPath();
//空的
getResourceMappingForRepository(SubmissionRepository.class).getPath();
添加(新链接(“…”);
返回资源;
}
}
这方面的大部分代码都已弃用,但究竟应该使用什么还不清楚(尽管我希望弃用的代码能够正常工作)
从本质上讲,我如何以编程方式发现特定实体或存储库的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;
}
}
@组件
公共类CaseResourceProcessor实现ResourceProcessor
{
@自动连线
私有RepositoryRestMVC配置;
@凌驾
公共资源流程(资源)
{
LinkBuilder link=configuration.entityLinks().linkForSingleResource(Submission.class,
resource.getContent().getLatestSubmission().getId());
resource.add(link.withRel(“最新提交”);
返回资源;
}
}