Java 405在Spring MVC中客户端请求命中拦截器之前,不支持请求方法“GET”

Java 405在Spring MVC中客户端请求命中拦截器之前,不支持请求方法“GET”,java,spring-mvc,interceptor,http-status-code-405,Java,Spring Mvc,Interceptor,Http Status Code 405,我已经在我的web应用程序中设置了拦截器。它工作得很好,我看到除了一个只接受POST请求的方法外,所有请求都会调用它。Spring似乎对所有的控制器方法都有映射,并且像GET或POST这样的请求方法映射到每个控制器方法。在调用拦截器之前,它会看到哪个请求方法映射到哪个控制器方法,如果找不到,它会抛出“405请求方法”GET“不受支持”错误。所以我想知道,我该如何应对 为了清楚起见,假设我的控制器中有两种方法 @Controller public class myController{

我已经在我的web应用程序中设置了拦截器。它工作得很好,我看到除了一个只接受POST请求的方法外,所有请求都会调用它。Spring似乎对所有的控制器方法都有映射,并且像GET或POST这样的请求方法映射到每个控制器方法。在调用拦截器之前,它会看到哪个请求方法映射到哪个控制器方法,如果找不到,它会抛出“405请求方法”GET“不受支持”错误。所以我想知道,我该如何应对

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

@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";
    }
这是我的拦截器:

配置也没有问题:

public class RootContextConfiguration extends WebMvcConfigurerAdapter
{   
    @Bean
    public URLInterceptors urlInterceptors(){
        return new URLInterceptors();
    }   
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(this.urlInterceptors());       
    }
    ....
} 
然后,无论何时对/test发出请求,我的拦截器都会被很好地调用。但无论何时向/login发出请求,都不会调用我的拦截器。相反,我看到一个405请求方法“GET”不受支持的错误。

错误:

405不支持请求方法“GET”


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

更改RequestMethod.POST以获取/登录?@ArsenDavtyan lol no。有更好的方法处理此问题。如果我的登录页面收到表单怎么办?那么我肯定需要POST。问题是,如果您得到的405请求方法'GET'不支持/login,这意味着您使用的是客户端GET,而不是POST
public class RootContextConfiguration extends WebMvcConfigurerAdapter
{   
    @Bean
    public URLInterceptors urlInterceptors(){
        return new URLInterceptors();
    }   
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(this.urlInterceptors());       
    }
    ....
}