我在我的web應用程序中設置了Interceptor
。它工作正常,我看到它被調用的所有請求,除了一個方法只接受POST
請求。 Spring似乎已經映射了所有的控制器方法,並且將哪種請求方法(如GET
或POST
)映射到每個控制器方法。在調用Interceptor
之前,它會查看哪個請求方法映射到哪個控制器方法,如果沒有找到它,它會拋出'405請求方法'GET'not supported`錯誤。所以我想知道,我該如何解決這個問題?405在客戶端請求遇到Spring MVC中的攔截器之前不支持請求方法'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
錯誤。
將RequestMethod.POST改爲GET 'for'/ login'? –
@ArsenDavtyan lol no。有一個更好的方法來處理這個問題。如果我的登錄頁面收到表單會怎麼樣?那麼我肯定會需要POST。 –
問題是,如果您爲'/ login'獲得'405請求方法'GET'不支持',那意味着您使用客戶端的'GET'而不是'POST' –