2012-10-29 162 views
2

我跟着一個非常好的教程,它可以很好地支持了GET HTTP方法,但由於某些原因,當我嘗試訪問POSTPUT方法服務器返回:RESTful Web服務日食

HTTP狀態405 - 不允許的方法

所以這是我在本教程一樣,

  • 我創建了一個新的動態Web PROJ ECT
  • 我進口的球衣REST風格的實施
  • 我創建了一個新的Java類,並設置一些球衣註釋
  • 我編輯的web.xml文件爲它創建一些州開始了一個servlet設置和點它給我的Java類映射它。

就是這樣,我在tomcat 6應用服務器上運行了應用程序。

所以,當我沿着我的班級的路徑,因此我的@GET方法工作順利,但是當我試圖用@POST代替@GET註釋時,它返回上述錯誤。

的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:web="http://java.sun.com/xml/ns/javaee/web- app_2_5.xsd" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     id="WebApp_ID" version="2.5"> 

    <display-name>RESTfulTest</display-name> 

    <servlet> 
     <servlet-name>NAME</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.RESTful.Test</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>NAME</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

我的Java類的球衣註釋:

package com.RESTful.Test; 

import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("/resttest") 
public class Test { 

    //this WORKS! 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getTestString() 
    { 
     return "Hello this is a test post"; 
    } 
    //this returns the error 
    @POST 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getTestString2() 
    { 
     return "Hello this is a test post"; 
    } 
    //this returns the error 
    @PUT 
    @Path("{param1}") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getTstWithInput(@PathParam("/param1") 
      String param) 
    { 
     return "hello "+param; 
    } 
    //this returns the error 
    @PUT 
    @Path(value="/putTest") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getTstWithInput2(@PathParam("/param1") 
      String param) 
    { 
     return "hello "+param; 
    } 
} 

請注意,我已經嘗試了所有的記錄,但我有相同的結果測試方法。我知道我不能同時運行他們中的一些,他們都只是測試。

我從URL調用REST資源:

  • 的 「http://本地主機/ RESTfulTest/REST/resttest /」

  • 的「http://本地主機/ RESTfulTest /休息/ resttest/MYNAME」

  • 的 「http://本地主機/ RESTfulTest/REST/resttest/putTest」

+0

你打電話給你的休息資源如何? – FUD

+0

請告訴確切的細節,只需在瀏覽器中粘貼http:// localhost/RESTfulTest/rest/resttest/putTest就會發出GET請求,這將返回405錯誤。一個常用的工具是curl ..「curl -XPUT http:// localhost/RESTfulTest/rest/resttest/putTest」 – FUD

+0

謝謝你,我還以爲瀏覽器發送帖子以及!再次感謝你 – Alejandro

回答

0

確保其餘的資源被正確地調用。捲髮可以成爲測試的有力工具

curl -XPUT http://localhost/RESTfulTest/rest/resttest/putTest