2012-08-06 62 views
0

我在REST服務中很新,在過去的兩週中我遇到了問題。我正在使用澤西島。我正在嘗試使用簡單的REST客戶端來調用POST方法,該方法接受JSON對象作爲參數並將其存儲到數據庫中。我的方法不起作用,但我決定走一步,所以現在我使用更簡單的客戶端和更簡單的提供者,以便測試我的POST和GET方法。奇怪的是,雖然我能夠調用POST方法:REST服務 - @POST調用在@GET不可用時工作

@POST 
@Path("/store") 
@Consumes(MediaType.TEXT_PLAIN) 
@Produces(MediaType.TEXT_PLAIN) 
public String storeData(String str) throws SQLException { 
    String query = "insert into myDB.test (id, name) values ('1', '" + str + "')"; 
    MyDB db = new MyDB(); 
    db.runQuery(query); 
    return responseCode.toString(); 
} 

這工作得很好!

但在同一個類中,@GET方法不起作用並返回404錯誤。 我的代碼如下:

@GET 
@Path("/retrieve") 
@Produces(MediaType.TEXT_PLAIN) 
public String getResponse() { 
return "Hello!"; 
} 

我知道我的問題可能是很簡單的多......但我試圖找出我做錯了什麼,從而去到我的實際執行...

非常感謝。

濱海


這裏是我的客戶端代碼

public class TestClient { 

    public static void main(String[] args) { 
     ClientConfig clientConfig = new DefaultClientConfig(); 
     Client client = Client.create(clientConfig); 
     WebResource webResource = client.resource("http://localhost:8080/server_classes/rest/server/retrieve"); 
      System.out.println(webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, "hello")); 
     } 
    } 

這裏是我的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>server_classes</display-name> 
    <servlet> 
     <servlet-name>Jersey REST Service</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>server_classes</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

我的包被命名爲server_classes和資源的路徑是@Path(「/ server」)

我從一開始就再次嘗試了vogella教程,只是改變了註釋路徑和方法(不僅僅給出了「Hello Jersey」響應)。但現在,我無法運行任何東西。只有404錯誤!

O也刪除了Tomcat的實例,然後整個tomcat安裝並重新安裝它,問題依舊。我正在使用Ubuntu 12.04,如果這有幫助..

謝謝!

+0

你想與你的GET請求訪問哪個網址?什麼是您的類的基本URL和web.xml中定義的REST資源的上下文路徑?在不相關的說明中,您的應用程序很容易受到SQL注入攻擊。可以傳遞一個像'''somename'); DROP TABLE myDB.test;「'這樣的字符串給你的服務,可能會搞亂數據庫或從潛在的任何表中竊取數據。即使它只是一個佔位符,我也可以清楚地聽到這種潛伏,恐怖的尖叫聲。 – toniedzwiedz 2012-08-06 20:45:24

+0

問題不在URL中,web.xml文件中都沒有。我已經檢查了很多次,以確保所有內容格式正確。此外,我嘗試使用路徑(「somepath」)方法或使用字符串「絕對路徑」來格式化URL(從客戶端)。沒有......顯然,目前,問題不在於配置數據庫(因爲代碼永遠不會到達那裏),而是服務器端!我無法弄清楚... – Stoup 2012-08-06 20:53:02

+1

請附上您的客戶端代碼片段。 – 2012-08-07 09:21:39

回答

0

嘗試從post您的要求更改爲get,爲你的servlet映射預計:

webResource.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class); 
相關問題