如何将 @RepositoryRestController 方法添加到 API 清单?
How to add @RepositoryRestController methods to API listing?
我有一个看起来像这样的控制器:
@RepositoryRestController
public class PersonOmnisearchController {
@Autowired
private PersonRepository personRepository;
@ResponseBody
@RequestMapping(value = "/persons/search/personOmnisearch", method = RequestMethod.GET)
public ResponseEntity<?> personOmnisearch(@RequestParam("search") String search, PersistentEntityResourceAssembler assembler) {
Person p = personRepository.findOne(Long.valueOf(search));
if (p == null) {
p = personRepository.findBySsn(search);
}
if (p == null) {
throw new ResourceNotFoundException();
}
return ResponseEntity.ok(assembler.toResource(p));
}
}
效果很好,但是用Traverson取数据时,/api/persons/search
的_links
部分没有personOmnisearch
link .我如何让 Spring Data REST 知道我的控制器以将其放入 api,以便无需知道直接 URL 就可以导航到它?
这是我的 Traverson 代码,希望对您有所帮助:
api.json()
.follow('$._links.persons.href', '$._links.search.href', 'omniSearch')
.withTemplateParameters({
search: search
})
.getResource()
P.S。 - 我不确定这是 Spring Data REST 还是 HATEOAS 问题,所以我标记了两者。随意删除不相关的那个。
您可能想要实现一个 ResourceProcessor<RepositorySearchesResource>
并在其回调方法中 process(…)
检查给定 RepositorySearchesResource
的域类型以找到您感兴趣的域类型并添加 link 到控制器方法。
如果实现注册为 Spring Bean,每次访问可用搜索列表时都会调用它。
我有一个看起来像这样的控制器:
@RepositoryRestController
public class PersonOmnisearchController {
@Autowired
private PersonRepository personRepository;
@ResponseBody
@RequestMapping(value = "/persons/search/personOmnisearch", method = RequestMethod.GET)
public ResponseEntity<?> personOmnisearch(@RequestParam("search") String search, PersistentEntityResourceAssembler assembler) {
Person p = personRepository.findOne(Long.valueOf(search));
if (p == null) {
p = personRepository.findBySsn(search);
}
if (p == null) {
throw new ResourceNotFoundException();
}
return ResponseEntity.ok(assembler.toResource(p));
}
}
效果很好,但是用Traverson取数据时,/api/persons/search
的_links
部分没有personOmnisearch
link .我如何让 Spring Data REST 知道我的控制器以将其放入 api,以便无需知道直接 URL 就可以导航到它?
这是我的 Traverson 代码,希望对您有所帮助:
api.json()
.follow('$._links.persons.href', '$._links.search.href', 'omniSearch')
.withTemplateParameters({
search: search
})
.getResource()
P.S。 - 我不确定这是 Spring Data REST 还是 HATEOAS 问题,所以我标记了两者。随意删除不相关的那个。
您可能想要实现一个 ResourceProcessor<RepositorySearchesResource>
并在其回调方法中 process(…)
检查给定 RepositorySearchesResource
的域类型以找到您感兴趣的域类型并添加 link 到控制器方法。
如果实现注册为 Spring Bean,每次访问可用搜索列表时都会调用它。