简体   繁体   中英

add custom parameters to spring mvc controller

I have a custom dispatcher servlet which extends the default DispatcherServlet to do some validation for all requests.

Since I will get all the parameters from a request(getInputStream()->Map) to do some validation, I want to pass the params to controller or add the params to the context where I can get them again from the cotroller.

Now I just put all the params to a global Map, but I wonder if there are some simple ways.

public class CustomDispatcherServlet extends DispatcherServlet {

private static final long serialVersionUID = 7250693017796274410L;

@Override
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {

    doFilter(request, response);
    super.doDispatch(request, response);
}
...

private void doFilter(HttpServletRequest request, HttpServletResponse response) {
    WLNResponse<String> error = null;

    try {
        boolean isSignValid = checkSignValidity(request);
        ...

private boolean checkSignValidity(HttpServletRequest request) throws IOException {
      // pass this params to controller or somewhere I can get from controller      
      Map<String, Object> params = WebUtils.readParams(request); 
      ...

The way I would go at validating params in the controller itself. for instance

@Controller
public ControllerClass
{
  @RequestMapping(value = "/someurl", method = RequestMethod.GET, params = {
    "requestParam"})
  public void someMethod(@RequestParam(value = "requestParam") String requestParam)
  {
    System.out.println("This is the value of the RequestParam requestParam " + requestParam);
  }
}

This way you can do your validation within the controller.

The only thing this doesn't solve for is if the request being made is not resolved to a valid controller. For that I would use the annotation @controllerAdvice .

当前,我只使用request.setAttribute()将参数放入属性中并从控制器获取它。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM