我在网络应用程序中设置了Interceptor
。它工作正常,我看到它被调用所有请求,除了一个只接受POST
请求的方法。看起来Spring有所有控制器方法的映射,以及请求方法(如GET
或POST
)映射到每个控制器方法。在调用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
错误。
答案 0 :(得分:1)
错误:
405 Request method 'GET' not supported
表示您针对servlet提出的任何客户端请求都是GET请求。问题不在于servlet。我不知道您是使用REST客户端还是浏览器等,但是您需要检查并确保发送到您的servlet的请求是POST