【问题标题】:How to add @RepositoryRestController methods to API listing?如何将 @RepositoryRestController 方法添加到 API 列表?
【发布时间】:2016-02-29 12:44:48
【问题描述】:

我有一个看起来像这样的控制器:

@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 链接。如何让 Spring Data REST 知道我的控制器以将其放入 api 中,以便无需知道直接 URL 即可导航到它?

这是我的 Traverson 代码,以防万一:

api.json()
   .follow('$._links.persons.href', '$._links.search.href', 'omniSearch')
   .withTemplateParameters({
       search: search
   })
   .getResource()

附: - 我不确定这是 Spring Data REST 还是 HATEOAS 问题,所以我标记了两者。随意删除不相关的。

【问题讨论】:

    标签: java spring spring-data-rest spring-hateoas


    【解决方案1】:

    您可能想要实现一个ResourceProcessor&lt;RepositorySearchesResource&gt;,并在其回调方法process(…) 中检查您感兴趣的给定RepositorySearchesResource 的域类型,并将链接添加到控制器方法。

    如果实现注册为 Spring Bean,则每次访问可用搜索列表时都会调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-13
      • 2012-06-02
      • 1970-01-01
      • 2019-10-13
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多