2012-02-14 29 views
8

Trong Spring MVC, tôi có thể làm điều này để có được một giá trị của các mặt hàng trên chuỗi truy vấn:Cách yêu cầu chuỗi truy vấn hoàn chỉnh trong Spring MVC?

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

Nhưng làm thế nào để tôi nhận được chuỗi truy vấn hoàn chỉnh như một chuỗi dài? I E. Tôi không muốn các thông số cá nhân từ nó, tôi muốn toàn bộ điều?

Rất cám ơn!

Trả lời

10

Thêm HttpServletRequest như là đối số cho phương pháp này, và nhận được chuỗi truy vấn từ yêu cầu:

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

Something như thế này bạn cần làm:

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

Lời nguyền bạn cho là nhanh hơn so với tôi, nhưng 1 để nhận nó ngay :) – Paul

+0

ha ha! đầu tiên sau khi làm mới và gần đây đã làm giống như một phần của dự án khác. vì vậy, câu trả lời nhanh chóng – kosa

+0

Rất tiếc, câu trả lời của bạn không được chấp nhận. Tôi đã nhận thấy những người có đại diện cao sẽ nhanh chóng ném ra một câu trả lời để có được dấu thời gian đầu và sau đó quay trở lại và điền vào các chi tiết. Có lẽ đó là mẹo để kiếm được số lượng lớn ... mặc dù tôi không quan tâm đủ để làm những việc như vậy. Ít nhất bạn và tôi biết rằng bạn đã có mã xuống đầu tiên :) – Paul

0

Controller tự biết nội dung của toàn bộ chuỗi truy vấn.

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

Sau đó bạn có thể nhận được các chuỗi truy vấn đầy đủ từ:

request.getQueryString(); 
3

Nếu bạn không muốn sử dụng HttpServletRequest trong điều khiển của bạn, bạn có thể tạo HandlerMethodArgumentResolver mà giải quyết chuỗi truy vấn.

Ví dụ:

@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

Đây là ... theo phong cách mùa xuân. – msangel

Các vấn đề liên quan