2012-02-14 17 views
8

En Spring MVC, no puedo hacer esto para conseguir un valor de puntos en la cadena de consulta:¿Cómo solicitar una cadena de consulta completa en Spring MVC?

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

Pero, ¿cómo puedo obtener la cadena de consulta completa como una cadena larga? Es decir. No quiero parámetros individuales, ¿lo quiero todo?

¡Muchas gracias!

Respuesta

10

Añadir la HttpServletRequest como argumento al método, y obtener la cadena de consulta de la solicitud:

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

Algo como esto que tiene que hacer:

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

maldición por ser más rápido que yo, pero 1 para hacer las cosas bien :) – Paul

+0

ja, ja! primero después de actualizar y hace lo mismo recientemente como parte de otro proyecto. entonces, respuesta rápida – kosa

+0

Bummer, su respuesta no fue aceptada. Me he dado cuenta de que las personas con alta reputación arrojarán rápidamente una respuesta para obtener la marca de tiempo temprana y luego regresar y completar los detalles. Tal vez ese es el truco para obtener los grandes números ... aunque no me importa lo suficiente como para hacer tales cosas. Al menos tú y yo sabemos que primero has descifrado el código :) – Paul

0

el propio controlador conoce el contenido de toda la cadena de consulta.

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

entonces se puede obtener la cadena de consulta completa de:

request.getQueryString(); 
3

Si no desea utilizar HttpServletRequest en su controlador, puede crear HandlerMethodArgumentResolver que resuelve cadena de consulta.

Ejemplo:

@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

Esto es tan ... en estilo de primavera. – msangel

Cuestiones relacionadas