If you do not want to use the HttpServletRequest in your controller, you can create a HandlerMethodArgumentResolver that resolves the query string.
Example:
@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) { ... } }
Rafal borek
source share