2015-04-15 8 views
12

आवेदन JDK 8, स्प्रिंग बूट & स्प्रिंग बूट जर्सी स्टार्टर का उपयोग करता है और एक युद्ध के रूप में पैक किया जाता है (हालांकि यह स्थानीय स्तर पर वसंत बूट Maven प्लगइन के माध्यम से चलाया जाता है) की अनुमति है।वसंत-बूट जर्सी: जर्सी स्थैतिक सामग्री की सेवा के लिए

मैं क्या करना चाहता हूं कि मैं एक स्वागत पृष्ठ के रूप में फ्लाई (निर्माण समय पर) पर प्रलेखन प्राप्त करना चाहता हूं।

मैं कई दृष्टिकोण की कोशिश की:

  1. दे जर्सी स्थिर सामग्री की सेवा वर्णित here
  2. रूप application.propertiesthe proper init parameter में कॉन्फ़िगर करके परिचय एक metadata-complete=falseweb.xml एक स्वागत योग्य-फ़ाइल के रूप में उत्पन्न HTML दस्तावेज़ सूची के क्रम में।

इनमें से कोई भी काम नहीं किया।

मैं स्प्रिंग एमवीसी को सक्षम करने या स्थिर फ़ाइल की सेवा के लिए जर्सी संसाधन बनाने से बचना चाहता हूं।

कोई विचार?

यहाँ जर्सी विन्यास वर्ग है (मैं असफल एक ServletProperties.FILTER_STATIC_CONTENT_REGEX जोड़ने की कोशिश की वहाँ):

@ApplicationPath("/") 
@ExposedApplication 
@Component 
public class ResourceConfiguration extends ResourceConfig { 

    public ResourceConfiguration() { 
     packages("xxx.api"); 
     packages("xxx.config"); 
     property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true); 
     property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true); 
    } 
} 

और यहाँ स्प्रिंग बूट आवेदन वर्ग है (मैं spring.jersey.init.jersey.config.servlet.filter.staticContentRegex=/.*html के साथ एक application.properties जोड़ने की कोशिश की, लेकिन यह काम नहीं किया, मैं बिल्कुल यकीन है कि क्या संपत्ति कुंजी यहाँ होना चाहिए) नहीं कर रहा हूँ:

@SpringBootApplication 
@ComponentScan 
@Import(DataConfiguration.class) 
public class Application extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 
+0

क्या आप कृपया कॉन्फ़िगरेशन पोस्ट कर सकते हैं? – dunni

+0

बस कॉन्फ़िगरेशन जोड़ा गया। – Rolf

उत्तर

22

मुझे सिर्फ पहला राज्य करते हैं, यही कारण है स्थैतिक सामग्री प्रस्तुत नहीं किए जाएंगे jerse के डिफ़ॉल्ट सर्वलेट मानचित्रण की वजह से है वाई सर्वलेट, जो /* है, और सभी अनुरोधों को हॉग करता है। तो स्थैतिक सामग्री परोसने वाले डिफ़ॉल्ट सर्वलेट तक नहीं पहुंचा जा सकता है। नीचे दिए गए समाधान के अलावा, दूसरा समाधान बस सर्वलेट मैपिंग को बदलना है। आप ऐसा कर सकते हैं जो ResourceConfig उप-वर्ग @ApplicationPath("/another-mapping") के साथ उपclass या application.properties संपत्ति spring.jersey.applicationPath सेट कर सकता है।


अपने पहले दृष्टिकोण के संबंध में, जर्सी ServletProperties पर एक नज़र डालें। जिस संपत्ति को आप कॉन्फ़िगर करने का प्रयास कर रहे हैं वह FILTER_STATIC_CONTENT_REGEX है। इसमें कहा गया है:

संपत्ति ही लागू जब जर्सी सर्वलेट कंटेनर एक फिल्टर के रूप में चलाने के लिए कॉन्फ़िगर किया गया है, अन्यथा इस संपत्ति नजरअंदाज कर दिया जाएगा

स्प्रिंग बूट डिफ़ॉल्ट रूप से एक सर्वलेट के रूप में जर्सी सर्वलेट कंटेनर कॉन्फ़िगर करता है (के रूप में उल्लेख here):

डिफ़ॉल्ट जर्सी करके प्रकार ServletRegistrationBeanjerseyServletRegistration नामित की एक @Bean में एक सर्वलेट के रूप में स्थापित कर दिया जाएगा। आप उसी बीन के साथ स्वयं को बनाकर उस बीन को अक्षम या ओवरराइड कर सकते हैं। आप spring.jersey.type=filter (@Bean को प्रतिस्थापित या ओवरराइड करने के लिए jerseyFilterRegistration) सेट करके एक Servlet के बजाय फ़िल्टर का उपयोग भी कर सकते हैं।

तो बस अपने application.properties में संपत्ति spring.jersey.type=filter निर्धारित करते हैं, और यह काम करना चाहिए। मैंने इसका परीक्षण किया है।

और एफवाईआई, चाहे जर्सी के संबंध में सर्वलेट फ़िल्टर या सर्वलेट के रूप में कॉन्फ़िगर किया गया हो, कार्यक्षमता वही है।

एक तरफ के रूप में, तो FILTER_STATIC_CONTENT_REGEX का उपयोग करके, जहां आपको सभी स्थिर फ़ाइलों को संभालने के लिए कुछ जटिल रेगेक्स सेट अप करने की आवश्यकता है, तो आप FILTER_FORWARD_ON_404 का उपयोग कर सकते हैं। यह वास्तव में मैं परीक्षण करने के लिए प्रयोग किया जाता है। मैं सिर्फ यह मेरे ResourceConfig

@Component 
public class JerseyConfig extends ResourceConfig { 

    public JerseyConfig() { 
     packages("..."); 
     property(ServletProperties.FILTER_FORWARD_ON_404, true); 
    } 
} 
+1

हेहे, बस अपना जवाब पढ़ने से पहले किया और यह काम करता है! :) – Rolf

+2

ध्यान दें कि जेनरेट की गई फ़ाइलों के साथ अभी भी एक जारी समस्या है। https://github.com/spring-projects/spring-boot/issues/2833 प्रगति को ट्रैक करता है। – Rolf

+0

@ रॉल्फ मुझे एक ही समस्या है, आपने इसे कैसे हल किया? –

3

में स्थापित किसी को अब भी यह काम करने के लिए नहीं मिल सकता है, जो के लिए, मैं @peeskillet द्वारा प्रदान की जवाब पीछा किया, और एक अतिरिक्त परिवर्तन करने के लिए किया था।

पहले मैंने Application.java में निम्न विधि बनाई थी।

@Bean 
public ServletRegistrationBean jerseyServlet() { 
    ServletRegistrationBean registration = new ServletRegistrationBean(new ServletContainer(), "/*"); 
    registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, JerseyConfig.class.getName()); 
    return registration; 
} 

समस्या यह है कि इस स्थापना जर्सी ResourceConfig विन्यास फाइल /* पथ के लिए सर्वलेट पंजीकृत है, और फिर है।

एक बार मैंने उपरोक्त विधि को हटा दिए, और @Configuration एनोटेशन को ResourceConfig कक्षा पर रखा, मैंने देखा कि स्थिर संसाधन वसंत बूट के माध्यम से पुनर्प्राप्त किया जा सकता है।

पूर्णता के लिए, यह अब मेरे ResourceConfig का एक स्निपेट है।

@Configuration 
public class JerseyConfig extends ResourceConfig { 
    public JerseyConfig() { 
     // Application specific settings 
     property(ServletProperties.FILTER_FORWARD_ON_404, true); 
    } 
} 

This blog postResourceConfig के लिए अंतर दृष्टिकोण का पता लगाने में मदद मिली।

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