2015-09-25 18 views
5

पर लिंक जोड़ें हमारे स्प्रिंग-डेटा-रेस्ट प्रोजेक्ट में हमारे पास एक/बर्गर/सर्च/ढूंढने वाला बर्गरफज़ी पर एक कस्टम (अस्पष्ट) खोज है? SearchString = "..." endpoint।स्प्रिंग डेटा रेस्ट - खोज एंडपॉइंट

क्या यह/बर्गर/खोज एंडपॉइंट पर स्वचालित रूप से उजागर किए गए रिपोजिटरी ढूंढने के तरीकों के बिना एक लिंक जोड़ना संभव है?

नियंत्रक खोज उजागर:

@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

आपका समाधान काफी खतरनाक है, क्योंकि आप अपनी विधि के मैपिंग (जहां यह परोसा जाता है) के बीच स्थिरता खो रहे हैं और इसके लिंक (जहां निम्नलिखित है) संबंध नेतृत्व करेंगे)। आपको 'लिंक' बनाने और स्प्रिंग हेटोआस से 'methodOn' स्थिर विधियों का उपयोग करना चाहिए ताकि आप' लिंक 'बनाते समय –

संबंधित मुद्दे