2015-09-25 10 views
5

Spring-Data-Rest Projectでは、/ buergers/search/findBuergerFuzzy?searchString = "..."エンドポイントでカスタム(ファジィ)検索を行います。Spring Data Rest - 検索エンドポイントへのリンクを追加する

自動的に公開されたリポジトリのfindByメソッドを上書きしないで、/ buergers/searchエンドポイントにリンクを追加できますか?

検索を暴露コントローラー:

@BasePathAwareController 
@RequestMapping("/buergers/search/") 
public class BuergerSearchController { 

    @Autowired 
    QueryService service; 

    @RequestMapping(value = "/findBuergerFuzzy", method = RequestMethod.GET) 
    public 
    @ResponseBody 
    ResponseEntity<?> findBuergerFuzzy(PersistentEntityResourceAssembler assembler, @Param("searchString") String searchString) { 
     if (searchString.length() < 3) 
      throw new IllegalArgumentException("Search String must be at least 3 chars long."); 
     List<Buerger> list = service.query(searchString, Buerger.class, new String[]{"vorname", "nachname", "geburtsdatum", "augenfarbe"}); 
     final List<PersistentEntityResource> collect = list.stream().map(assembler::toResource).collect(Collectors.toList()); 
     return new ResponseEntity<Object>(new Resources<>(collect), HttpStatus.OK); 
    } 
} 

答えて

3

私は問題を解決すると思われるRepositorySearchesResourceを見つけた春-データ・ソース残りを掘ります。

@Component 
public class SearchResourcesProcessor implements ResourceProcessor<RepositorySearchesResource> { 

    @Override 
    public RepositorySearchesResource process(RepositorySearchesResource repositorySearchesResource) { 
     final String search = repositorySearchesResource.getId().getHref(); 
     final Link findFullTextFuzzy = new Link(search + "/findFullTextFuzzy{?q}").withRel("findFullTextFuzzy"); 
     repositorySearchesResource.add(findFullTextFuzzy); 

     return repositorySearchesResource; 
    } 
} 

このコードをテンプレートで生成するので、これで十分であり、私たちのニーズを満たしています。適切かつ安全な方法でコメントを確認してください。

+2

'resource.getDomainType()'をチェックして、検索機能が正しいリソースにのみ表示されるようにする必要があります。 \t 'if(ResourceClass.class.equals(resource.getDomainType()))' –

+2

あなたのメソッドのマッピング(どこで提供されているか)とそれのリンクとの間の整合性が失われているので、あなたのソリューションは非常に危険です。関係が結ぶ)。 'Link'を作成する際に、Spring Hateoasの' linkTo'メソッドと 'methodOn'静的メソッドを使用してください。 –

関連する問題