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

Posted

技术标签:

【中文标题】405 在客户端请求命中 Spring MVC 中的拦截器之前不支持请求方法“GET”【英文标题】:405 Request method 'GET' not supported before client request hits Interceptor in Spring MVC 【发布时间】:2017-05-29 08:42:55 【问题描述】:

我在我的网络应用程序中设置了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 错误。

【问题讨论】:

RequestMethod.POST 更改为GET for /login? @ArsenDavtyan 大声笑没有。有更好的方法来处理这个问题。如果我的登录页面收到表单怎么办?那我肯定需要 POST。 问题是如果你得到405 Request method 'GET' not supported/login,这意味着你在客户端使用GET,而不是POST 【参考方案1】:

错误:

405 Request method 'GET' not supported

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

【讨论】:

以上是关于405 在客户端请求命中 Spring MVC 中的拦截器之前不支持请求方法“GET”的主要内容,如果未能解决你的问题,请参考以下文章

405 - 请求方法“POST”不支持 Spring MVC + Spring Security

Spring MVC HTTP 状态 405 - 不支持请求方法“POST”

HTTP 状态 405 - 不支持请求方法“POST”(Spring MVC)

Spring MVC PUT 请求返回 405 Method Not Allowed

不支持 Spring MVC 请求方法“POST”-> HTTP 405

jsp spring mvc 上传时HTTP Status 405 - Request method 'GET' not supported是啥原因