405 请求方法 'GET' 在客户端请求命中 Spring MVC 中的拦截器之前不受支持

405 Request method 'GET' not supported before client request hits Interceptor in Spring MVC

我在我的网络应用程序中设置了 Interceptor。它工作正常,我看到它被所有请求调用,除了一个只接受 POST 请求的方法。似乎 Spring 具有所有控制器方法的映射以及哪些请求方法(如 GETPOST)映射到每个控制器方法。在调用 Interceptor 之前,它会查看哪个请求方法映射到哪个控制器方法,如果没有找到,则会抛出“405 Request method 'GET' not supported”错误。所以我想知道,我该如何解决?

为了清楚起见,假设我的控制器中有两个方法。

@Controller
public class myController{

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String test1(){      
        return "abc";
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String test1(){      
        return "xyz";
    }

这是我的 Interceptor:

public class URLInterceptors extends HandlerInterceptorAdapter  {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("REQUESTED SERVLET PATH IS: " + request.getServletPath());   
        return true;    
    }   
}

而且配置也没有问题:

public class RootContextConfiguration extends WebMvcConfigurerAdapter
{   
    @Bean
    public URLInterceptors urlInterceptors(){
        return new URLInterceptors();
    }   
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(this.urlInterceptors());       
    }
    ....
} 

然后,每当对 "/test" 发出请求时,我的 Interceptor 就会被完美调用。但无论何时向 "/login" 发出请求,我的 Interceptor 都不会被调用。相反,我看到 405 Request method 'GET' not supported 错误。

错误:

405 Request method 'GET' not supported

表示您针对 servlet 发出的任何客户端请求都是 GET 请求。问题不在于 servlet。我不知道您使用的是 REST 客户端还是浏览器等,但您需要检查并确保发送到您的 servlet 的请求是 POST