405在客户端请求命中Spring MVC中的Interceptor之前,不支持请求方法'GET'

时间:2017-01-13 21:28:27

标签: java spring-mvc interceptor http-status-code-405

我在网络应用程序中设置了Interceptor。它工作正常,我看到它被调用所有请求,除了一个只接受POST请求的方法。看起来Spring有所有控制器方法的映射,以及请求方法(如GETPOST)映射到每个控制器方法。在调用Interceptor之前,它会查看哪个请求方法映射到哪个控制器方法,如果找不到它,则会抛出'405 Request方法'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";
    }

这是我的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错误。

1 个答案:

答案 0 :(得分:1)

错误:

405 Request method 'GET' not supported

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