1. 程式人生 > >org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported

org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported

測試 exce 控制 bst pub java reflect index 哈哈

1:先上控制臺報錯信息

?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘PUT‘ not supported at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:
203) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:352) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:299) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:
57) at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:299) at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1104) at org.springframework.test.web.servlet.TestDispatcherServlet.getHandler(TestDispatcherServlet.java:
90) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:916) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:879) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:65) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:144) at main.test.PerformanceTestBase.testPut(PerformanceTestBase.java:46) at main.test.PerformanceTest.junitTestUpdRentByQian(PerformanceTest.java:1917) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:73) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:73) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:217) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at org.junit.runner.JUnitCore.run(JUnitCore.java:115) at main.test.TestRunnable.run(PerformanceTest.java:2129) at java.lang.Thread.run(Thread.java:744)

2:分析錯誤原因

以前分析過一些異常相關的問題,自從進入新公司之後,也做了若幹個項目,其中也遇到了許多的問題,不過每一個新的問題都記錄下來自己的分析、解決之道的習慣沒有保持下來,主要事情比較多,上班和住的地方相對比較遠,每天早出晚歸,精力時間有限。哈哈,不過這個問題遇到幾次了,前幾天同事又遇到了,讓我萌生了繼續記錄下來的想法。

還是老辦法,遇到程序報錯,先從頭到尾將報錯信息過一遍,分析、解決的思路無怪乎下面幾種:

1:如果是以前遇到過並且分析解決過的,那麽問題就迎刃而解了——這就是積累的重要性的體現了

2:如果從來沒遇到過,先將報錯信息從頭到尾掃一下,自己編寫的代碼出錯的概率是個大概率事件,找找報錯信息中自己項目中報錯的代碼是那一句,結合報錯信息和自己的代碼,大部分的錯誤都能找到根源,並且通過自己的分析都能解決掉,現在這個錯誤就是這樣的。

   有用的報錯信息是:org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘PUT‘ not supported
我的代碼中相關的代碼是:@RequestMapping(value="/BG/Rent/{id}",method={RequestMethod.POST}))
請求的方法有:
?
12345package org.springframework.web.bind.annotation; public enum RequestMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;}
   問題很明顯了,下面就是看看該修改那裏的問題了——我這裏是通過多線程+單元測試的方式模擬簡單的壓力測試情景,看一下自己單元測試中的情況,發現對應的方法調錯了,ok,發現問題基本上算是解決了問題。修改一下就好了,然後測試一下。

3:如果自己從來沒遇到過,通過步驟2也不能將問題解決,就需要自己利用搜索引擎的力量了,基本上到這裏又能解決大部分的問題了

3:題外話

目前的項目采用的是AngularJs+Bootstrap+SpringMVC+SpringBoot+JPA的技術手段來實施的,並且前後端的開發是分開的,通過使用AngularJs發送異步請求的方式常常會出現這個問題,因為同一個URL通過配置不同的方法的方式來對應應用中的增刪改查的方法(增——PUT,刪——DELETE,改——POST,查——POST/GET分別對應列表查詢和單個的信息查詢)。

4:查看對應的報錯異常類的相關信息,有時也能幫助我們更快更好更全面的了解此異常觸發的時機,比如:

技術分享圖片

org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported