2015-09-25 17 views
5

Spring-Data-Rest projemizde, bir/buergers/search/findBuergerFuzzy? SearchString = "..." uç noktasında özel (bulanık) arama yaptık.Yaylı Veri Kalanı - Arama son noktaya link ekle

Bunun için/buergers/search endpoint dizinine bir link eklenebilir (Otomatik olarak ortaya çıkarılan Repository findBy Yöntemlerini geçersiz kılmaksızın)? i sorunu çözmek gibi görünüyor RepositorySearchesResource bulunan yay veri dinlenme kaynağını Kazı

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

cevap

3

:

Denetleyici arama açığa.

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

Bu kodu şablonlar ile oluşturduğumuzdan, bu yeterlidir ve gereksinimlerimizi doldurur. Yorumları doğru ve güvenli bir şekilde kontrol ettiğinizden emin olun.

+2

Arama işlevinizin yalnızca doğru kaynakta görüntülendiğinden emin olmak için 'resource.getDomainType()' öğesini işaretlemelisiniz. \t 'if (ResourceClass.class.equals (resource.getDomainType()))' –

+2

Çözümünüz çok tehlikelidir, çünkü yönteminizin eşlenmesi (nerede sunulduğu) ile bağlantısının birbiri arasında tutarlılığı (aşağıdaki gibi) kaybediyorsunuz ilişki yol açacaktır). 'Hat' oluştururken bunu önlemek için Spring Hateoas'tan 'linkTo' ve' methodOn' statik yöntemlerini kullanmalısınız. –

İlgili konular