2012-02-14 101 views
8

在Spring MVC中,我能做到這一點來獲得項目的查詢字符串的值:如何在Spring 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 2012-02-14 17:10:58

+0

哈哈!刷新後的第一個,最近也做了其他項目的一部分。所以,快速回答 – kosa 2012-02-14 18:10:08

+0

無賴,你的答案沒有被接受。我注意到有很高代表的人會很快拋出一個答案來獲得早期的時間戳,然後返回並填寫細節。也許這就是獲得大數據的訣竅......雖然我不在乎做這些事情。至少你和我知道你先把代碼放下了:) – Paul 2012-02-14 18:37:22

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 2013-08-23 09:36:08

相關問題