How to know which param of @RequestMapping is call

2019-02-27 01:47发布

问题:

This is my @RequestMapping annotation:

  @RequestMapping({"/loginBadCredentials", "/loginUserDisabled", "/loginUserNumberExceeded"})
  public String errorLogin(...){        
            ... 
        }

Inside the method errorLogin , is there a way to know which of the three url was "called"?

回答1:

Add HttpServletRequest as your parameters and use it to find the current request path.

Update: Spring also provides RequestContextHolder:

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
String currentReqUri = attributes.getRequest().getRequestURI();

In my opinion, first approach is better and a little more testable.



回答2:

you can inject the HttpServletRequest into the method-parameters and then get the called uri.

  @RequestMapping({"/loginBadCredentials", "/loginUserDisabled", "/loginUserNumberExceeded"})
  public String errorLogin(HttpServletRequest request) {        
            String uri = request.getRequestURI(); 
            // do sth with the uri here
  }


回答3:

Simplest method is to inject HttpServletRequest and get the uri:

@RequestMapping({"/loginBadCredentials", "/loginUserDisabled", "/loginUserNumberExceeded"})
public String errorLogin(HttpServletRequest request) {        
        String uri = request.getRequestURI(); 
        // switch on uri what you need to do
}