如何将 @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部分没有personOmnisearchlink .我如何让 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,每次访问可用搜索列表时都会调用它。