2012-02-14 11 views
8

वसंत MVC में, मैं यह कर सकता क्वेरी स्ट्रिंग पर मदों की एक मूल्य प्राप्त करने के:स्प्रिंग एमवीसी में पूर्ण क्वेरी स्ट्रिंग का अनुरोध कैसे करें?

public void sendMessage(HttpServletResponse response, 
          @RequestParam("Session Id") String sessionId, 

लेकिन यह कैसे मैं एक लंबी स्ट्रिंग के रूप पूरा क्वेरी स्ट्रिंग पाने के लिए? अर्थात। मैं इससे अलग-अलग पैरामीटर नहीं चाहता, मुझे पूरी चीज चाहिए?

बहुत धन्यवाद!

उत्तर

10

विधि करने के लिए तर्क के रूप में HttpServletRequest जोड़ें, और अनुरोध से क्वेरी स्ट्रिंग मिलती है:

public void sendMessage(HttpServletRequest request, 
         HttpServletResponse response { 
    String queryString = request.getQueryString(); 
} 
3

कुछ इस तरह तुम क्या करने की जरूरत है:

public void sendMessage(HttpServletResponse response, 
           @RequestParam("Session Id") String sessionId, HttpServletRequest request,.. 
    { 
    String qString= request.getQueryString(); 
+0

अभिशाप तुम मुझे से अधिक तेजी से होने के लिए, लेकिन +1 यह सही :) – Paul

+0

हा हा प्राप्त करने के लिए! रीफ्रेश के बाद पहला और हाल ही में अन्य प्रोजेक्ट के हिस्से के समान ही किया गया। तो, त्वरित उत्तर – kosa

+0

बमर, आपका उत्तर स्वीकार नहीं किया गया था। मैंने देखा है कि उच्च प्रतिनिधि वाले लोग जल्दी ही शुरुआती टाइमस्टैंप प्राप्त करने के लिए जवाब निकाल देंगे और फिर वापस जाएं और विवरण भरें। हो सकता है कि बड़ी संख्याएं प्राप्त करने की चाल है ... हालांकि मुझे ऐसी चीजों को करने की परवाह नहीं है। कम से कम आप और मुझे पता है कि आपके पास पहले कोड था :) – Paul

0

नियंत्रक ही सामग्री जानता है संपूर्ण क्वेरी स्ट्रिंग का।

public ModelAndView handleRequest(HttpServletRequest request, 
     HttpServletResponse response) throws Exception 

फिर आप से पूर्ण क्वेरी स्ट्रिंग प्राप्त कर सकते हैं:

request.getQueryString(); 
3

आप अपने नियंत्रक में HttpServletRequest का उपयोग नहीं करना चाहते, तो आप HandlerMethodArgumentResolver क्वेरी स्ट्रिंग का समाधान करता है बना सकते हैं।

उदाहरण:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.PARAMETER) 
public @interface QueryString { 
} 


public class QueryStringResolver implements HandlerMethodArgumentResolver { 
    @Override 
    public boolean supportsParameter(MethodParameter parameter) { 
     Annotation[] parameterAnnotations = parameter.getParameterAnnotations(); 
     for (Annotation parameterAnnotation : parameterAnnotations) { 
      if (QueryString.class.isInstance(parameterAnnotation)) { 
       return true; 
      } 
     } 

     return false; 
    } 

    @Override 
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest,         WebDataBinderFactory binderFactory) throws Exception { 
     HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); 
     return request.getQueryString(); 
    } 
} 


<mvc:annotation-driven> 
    <mvc:argument-resolvers> 
     <bean class="mypackage.QueryStringResolver"/> 
    </mvc:argument-resolvers> 
</mvc:annotation-driven> 


public class MyController { 
    @RequestMapping(...) 
    public String someMethod(@QueryString String queryString) { 
     ... 
    } 
} 

+0

यह वसंत शैली में है ... – msangel

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