2009-02-26 9 views
14

मैं वसंत एनोटेशन का उपयोग कर रहा हूं, मैं नियंत्रक से सेवा में HttpRequestContext पास कर सकता हूं।क्या वर्तमान अनुरोध के HttpServletRequest को पाने का कोई स्थिर तरीका है

मैं RequestContext पास करने से पहले एक स्थिर तरीका या कोई बेहतर समाधान ढूंढ रहा हूं।

उत्तर

2

मुझे नहीं लगता कि यह एक अच्छा विचार है। सेवा परत को यह पता नहीं होना चाहिए कि यह HTTP क्लाइंट से निपट रहा है या नहीं।

स्टेटिक सही विचार की तरह नहीं लगता है, या तो। HttpRequestContext को एक विशेष वर्ग नहीं, एक HttpRequest उदाहरण से जोड़ा जाना चाहिए।

मेरी राय में एक बेहतर डिज़ाइन, जो कुछ भी सेवा को संदर्भ से बाहर करने की आवश्यकता है उसे प्राप्त करेगा और इसे पास कर देगा। सेवा या HTTP परत के साथ मिलकर सेवा की आवश्यकता नहीं है।

+0

उत्कृष्ट जवाब –

+10

के बजाय बुरा प्रोग्रामिंग शैली के बारे में शिकायत, तो आप सिर्फ सवाल का जवाब कर सकते हैं? मेरा मतलब है, आप सवाल का जवाब दे सकते हैं और फिर बुरी शैली के बारे में शिकायत कर सकते हैं, लेकिन आप इसका उत्तर नहीं देते हैं। -1 –

+3

यह एक शैक्षणिक साइट है। मुझे लगता है कि जब आप गलत रास्ते पर हैं तो यह जानकर लायक है। आप असहमत हैं। मैं बताउंगा कि जिस व्यक्ति ने सवाल पूछा वह इसे जवाब के रूप में स्वीकार कर लिया। आपने क्रैकी टिप्पणी को छोड़कर मूल्य के कुछ भी पोस्ट नहीं किए हैं। यहां कौन अधिक सहायक था? – duffymo

26

आप वसंत का उपयोग कर रहे आप निम्न कर सकते हैं:

public static HttpServletRequest getCurrentHttpRequest(){ 
    RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); 
    if (requestAttributes instanceof ServletRequestAttributes) { 
     HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest(); 
     return request; 
    } 
    logger.debug("Not called in the context of an HTTP request"); 
    return null; 
} 
+0

इसे एक बीन के रूप में बांधें? एक स्थिर विधि के बजाय, 'autowired' का उपयोग कैसे किया जाए? – sbs

+0

@sbs यहां देखें https://stackoverflow.com/a/36736964/5788341 – Binakot

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

  • कोई संबंधित समस्या नहीं^_^