2013-05-15 6 views
6

मैं जर्सी & Google गुइस 3.0 का उपयोग करके, एक ही सर्वलेट में 2 अलग-अलग यूआरएल पैटर्न मैप करने के लिए कोशिश कर रहा हूं और इनमें से प्रत्येक यूआरएल पैटर्न को अलग-अलग पर लागू किया जा सकता है मेरे प्रोजेक्ट में पैकेज।Google गुइस और जर्सी एकाधिक यूआरएल पैटर्न

स्पष्ट होने के लिए मैं नीचे दिए गए कोड का हिस्सा चिपका रहा हूं और मैं समझाऊंगा।

web.xml

<listener> 
    <listener-class>com.abc.web.listeners.GuiceContextListener</listener-class> 
</listener> 
<filter> 
    <filter-name>guiceFilter</filter-name> 
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>guiceFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

GuiceContextListener

public final class GuiceContextListener extends GuiceServletContextListener { 
... 
    private JerseyServletModule getJerseyServletModule() { 
     JerseyServletModule jerseyModule = new JerseyServletModule() { 
      @Override 
      protected void configureServlets() { 
       filter("/*").through(WebServerStateFilter.class); 
       final Map<String, String> params = new HashMap<String, String>(); 
       StringBuilder sb = new StringBuilder(); 
       sb.append("com.abc.web.stats.services"); 
       params.put(PackagesResourceConfig.PROPERTY_PACKAGES, sb.toString()); 
       serve("/api/v1/*").with(GuiceContainer.class, params); 

       final Map<String, String> params1 = new HashMap<String, String>(); 
       StringBuilder sb1 = new StringBuilder(); 
       sb1.append("com.abc.web.stats.otherservices"); 
       params1.put(PackagesResourceConfig.PROPERTY_PACKAGES, sb1.toString()); 
       serve("/api/*").with(GuiceContainer.class, params1); 
      } 
     } 
    } 
... 
} 

तो बुनियादी तौर पर मैं चाहता हूँ:

  • यूआरएल के साथ "/ API/v1/*" शुरू करने पैकेज "com.abc.web.stats" में सेवाओं द्वारा servlet GuiceContainer के माध्यम से संभाला जाएगा। सेवाओं/api/* " पैकेज में सेवाओं द्वारा एक ही सर्वलेट GuiceContainer माध्यम से नियंत्रित किया जा करने के लिए" com.abc.web.stats "
  • के साथ शुरू यूआरएल"। otherservices "

मैं कोड से ऊपर थे, लेकिन यह काम करने के लिए, ऐसा लगता है कि केवल पहले प्रतीत नहीं होता है" सेवा "कॉल इस मामले में तो ध्यान में रखा ही URL को मिलान"/API/v1/* "परोसा जाता है। मैं हार्डकोड नहीं करना चाहता" "मेरी सेवाओं में के बाद से संस्करण (करने के लिए बदल सकता है" v1 भविष्य में वी 2 ")।

किसी ने मुझसे मदद कर सकते हैं?

धन्यवाद, पॉल

उत्तर

2

मई अपने वर्तमान अंतराल को दोबारा संशोधित किया जाना चाहिए, लेकिन फिर भी आपका कोड नेक्सेसरी से थोड़ा अधिक जटिल दिखता है। मेरे मामले में यह इस तरह काम करता है।

... 
String packages = "com.abc.web.stats.services;com.abc.web.stats.otherservices"; 
params.put(PackagesResourceConfig.PROPERTY_PACKAGES, packages); 

serve("/api/v1/*").with(GuiceContainer.class, params); 
serve("/api/*").with(GuiceContainer.class, params); 
... 

जर्सी अलग-अलग सूची को एक सूची के साथ स्कैन कर सकता है;

शायद आपको अपना "एपीआई * * एंडपॉइंट बदलना चाहिए, लेकिन मुझे सच में यकीन नहीं है कि जर्सी उस स्थिति में कैसे काम करेगा। मैं शर्त लगा सकता हूं कि यह इस कोड के साथ ठीक काम करता है।

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