Как запросить полную строку запроса в Spring MVC? - PullRequest
8 голосов
/ 14 февраля 2012

В Spring MVC я могу сделать это, чтобы получить значение элементов в строке запроса:

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

Но как мне получить полную строку запроса в виде одной длинной строки?Т.е. я не хочу отдельных параметров из этого, я хочу все это?

Большое спасибо!

Ответы [ 4 ]

10 голосов
/ 14 февраля 2012

Добавьте HttpServletRequest в качестве аргумента к методу и получите строку запроса из запроса:

public void sendMessage(HttpServletRequest request,
                        HttpServletResponse response {
    String queryString = request.getQueryString();
}
3 голосов
/ 27 июня 2013

Если вы не хотите использовать 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) {
        ...
    }
}

3 голосов
/ 14 февраля 2012

Что-то подобное нужно сделать:

    public void sendMessage(HttpServletResponse response,
                               @RequestParam("Session Id") String sessionId, HttpServletRequest request,..
    {
   String qString= request.getQueryString();
0 голосов
/ 14 февраля 2012

Контроллер сам знает содержимое всей строки запроса.

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

Затем можно получить полную строку запроса из:

request.getQueryString();
...