2017-01-13 103 views
0

我在我的web應用程序中設置了Interceptor。它工作正常,我看到它被調用的所有請求,除了一個方法只接受POST請求。 Spring似乎已經映射了所有的控制器方法,並且將哪種請求方法(如GETPOST)映射到每個控制器方法。在調用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錯誤。

+0

將RequestMethod.POST改爲GET 'for'/ login'? –

+0

@ArsenDavtyan lol no。有一個更好的方法來處理這個問題。如果我的登錄頁面收到表單會怎麼樣?那麼我肯定會需要POST。 –

+0

問題是,如果您爲'/ login'獲得'405請求方法'GET'不支持',那意味着您使用客戶端的'GET'而不是'POST' –

回答

1

錯誤:

405 Request method 'GET' not supported

手段無論客戶端請求您正在針對該servlet是一個GET請求。問題不在於servlet。我不知道你是否使用REST客戶端或瀏覽器等,但你需要檢查並確保發送到你的servlet的請求是POST

相關問題