gpt4 book ai didi

java - 资源上的 Spring Data Rest 自定义链接

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:27 25 4
gpt4 key购买 nike

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

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

显而易见的解决方案似乎是注入(inject)一个 RepositoryRestConfiguration 的实例,但是在这个区域中对注入(inject)配置的所有查找都返回 null,即使存储库已公开并且正在为该资源工作。

其他数据(如投影定义、具有 ID 的类等)按预期存在于注入(inject)的 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;
}
}

关于java - 资源上的 Spring Data Rest 自定义链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40347857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com