2014-06-17 11 views
7

वसंत डेटा का उपयोग करना REST मैंने ProjectRepository का खुलासा किया है जो लिस्टिंग परियोजनाओं का समर्थन करता है और उन पर सीआरयूडी संचालन करता है। जब मैं http://localhost:8080/projects/ पर जाता हूं तो मुझे उम्मीद है कि परियोजनाओं की सूची मुझे मिलती है।वसंत डेटा में संग्रह इकाई पर लिंक का खुलासा REST

जो मैं करने की कोशिश कर रहा हूं वह परियोजना संग्रह के लिए JSON प्रतिक्रिया के _links अनुभाग में एक कस्टम कार्रवाई जोड़ें।

उदाहरण के लिए, मैं कुछ इस तरह वापस जाने के लिए http://localhost:8080/projects/ करने के लिए कॉल करना चाहते हैं:

{ 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/projects/{?page,size,sort}", 
     "templated" : true 
    }, 
    "search" : { 
     "href" : "http://localhost:8080/projects/search" 
    }, 
    "customAction" : { 
     "href" : "http://localhost:8080/projects/customAction" 
    } 
    }, 
    "page" : { 
    "size" : 20, 
    "totalElements" : 0, 
    "totalPages" : 0, 
    "number" : 0 
    } 
} 

कहाँ customAction कुछ नियंत्रक में परिभाषित किया गया है।

मैं निम्नलिखित वर्ग बनाने की कोशिश की है:

public class ProjectCollectionResourceProcessor implements ResourceProcessor<Resource<Collection<Project>>> { 

    @Override 
    public Resource<Collection<Project>> process(Resource<Collection<Project>> listResource) { 
     // code to add the links to customAction here 
     return listResource; 
    } 

} 

और जोड़ने मेरी अनुप्रयोगों विन्यास के लिए निम्न बीन जोड़ने:

@Bean 
public ProjectCollectionResourceProcessor projectCollectionResourceProcessor() { 
    return new ProjectCollectionResourceProcessor(); 
} 

लेकिन process(...) करता है कभी कहा जाता है करने के लिए नहीं लग रहे हैं। संसाधनों के संग्रह में लिंक जोड़ने का सही तरीका क्या है?

+0

भी देखें, इस सवाल: http://stackoverflow.com/q/40156413 –

उत्तर

4

संग्रह संसाधन Resources<Resource<Project>> का उदाहरण प्रस्तुत करते हैं, Resource<Collection<Project>> नहीं। इसलिए यदि आप अपने ResourceProcessor कार्यान्वयन में जेनेरिक टाइपिंग को बदलते हैं तो तदनुसार काम करना चाहिए जैसा कि आप उम्मीद करते हैं।

+0

कोड नीचे जोड़ने में मदद नहीं की 'सार्वजनिक वर्ग ProjectsResourceProcessor लागू करता \t \t ResourceProcessor <संसाधन > { \t @Autowired \t निजी EntityLinks इकाई लिंक; \t @Override \t सार्वजनिक संसाधन प्रक्रिया (संसाधन संसाधन) { \t \t resources.add (entityLinks.linkFor (Project.class) .slash ("कस्टम") \t \t \t \t .withRel ("कस्टम")); \t \t रिटर्न संसाधन; \t} } 'एसडीआर-2.1.0.RELEASE – Stackee007

+0

का उपयोग करने के लिए मुझे इसे काम करने के लिए मुझे 'संसाधन प्रसंस्करण ' लागू करना था और कोड के भीतर यह निर्धारित करना था कि यह 'प्रोजेक्ट' संसाधन था या नहीं। सहायता के लिए धन्यवाद। –

+0

@ thorben.jakobsen मैं कुछ संसाधनों की तलाश में हूं (सीखने वाले :-) अपने समाधान को लागू करने के लिए। मेरे पास एक पेजेड संसाधन भी है। – Stephane

4

मुझे एक ही समस्या थी। क्या मेरे लिए काम किया था:

public class ProjectsResourceProcessor implements ResourceProcessor<PagedResources<Resource<Project>>> { 

    private final @NonNull EntityLinks entityLinks; 

    @Override 
    public PagedResources<Resource<Project>> process(PagedResources<Resource<Project>> pagedResources) { 

     ... 

     return pagedResources; 
    } 
} 
+0

के मेरे पेजेड समेकित रूट के लिए नहीं बुलाया जाएगा, लिंक प्रकट नहीं होते हैं: '( – Kakawait

+0

संसाधन प्रोसेसरवापर :: में एक स्पष्ट जांच है IValueTypeMatch जांचने के लिए खाली सामग्री के लिए और यह संसाधन प्रोसेसर को फायरिंग से रोकता है। –

+2

yup एक ही समस्या का सामना कर रहा है .. इस पर काबू पाने के लिए कोई हैक –

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