The controller has a method that heavily uses request parameters, headers, and cookie similar to:
package foo.bar; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class MyContoller{ ... @RequestMapping(value = "/someurl", method = RequestMethod.GET) public void myVeryVerboseMethod(@CookieValue("JSESSIONID") String cookie, @RequestHeader("Accept-Encoding") String encoding, @RequestHeader("header1") String header1, @RequestHeader("header2") String header2, @RequestHeader("header3") String header3 ){ ... } }
The very verbose method above can be converted to just a one-object-method parameter:
@RequestMapping(value = "/someurl", method = RequestMethod.GET) public ModelAndView myNotSoVerboseMethod(MyRequestParams requestParams) { ... }
To achieve this method, add the following on your specified resolver for your custom parameter:
The custom resolver should implement the WebArgumentResolver where you need to add the resolveArgument method where a NativeWebRequest is one of its parameters. The NativeWebRequest exposes requestParams, Headers, as well as cookies (via WebUtil). Here is an example of a custom resolver implementation:
package com.mycase.resolver; import org.springframework.web.context.request.*; public class MyCustomResolver implements WebArgumentResolver{ public Object resolveArgument(MethodParameter methodParam, NativeWebRequest webRequest){ //check if parameter is of your bean if (methodParam.getParameterType()==MyRequestParams.class){ MyRequestParams requestParams = new MyRequestParams(); //set request param, header and cookie can be set here requestParams.setRequestParam1(webRequest.getParameter("param1")); requestParams.setRequestHeader1(webRequest.getHeader("header1")); HttpServletRequest servletRequest = (HttpServletRequest) webRequest.getNativeRequest(); requestParams.setCookie1(WebUtils.getCookie(servletRequest, "cookie1").getValue()); return requestParams; } return UNRESOLVED; } }