2013-07-23 44 views
1

我試圖調用從HTML表單用Java編寫的REST Web服務調用REST Web服務無法從HTML表單action屬性

我的web服務代碼是

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

@Path("/hello") 
public class Hello { 

     @POST 
     @Path("/hello") 
     @Consumes(MediaType.TEXT_HTML) 
     @Produces(MediaType.TEXT_HTML) 
     public String hello(@FormParam("username") String name1) { 
    return "<html> " + "<title>" + "Hello Jersey" + "</title>" 
      + "<body><h1>" + "Hello from helpdesk" + "</body></h1>" + "</html> "; 
     } 

} 

而且我的HTML頁面

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <form action= "http://localhost:8080/helpdesk/rest/hello" method="POST"> 
     Username: <input type="text" name="username"> 
     <p> 
     <input type="submit" value="Submit"> 
    </form> 

</body> 
</html> 

這裏在html表單中,我已經調用了web服務../rest/hello。 我已經提到http://www.vogella.com/articles/REST/

可以請任何人告訴我該怎麼做嗎?

謝謝

+0

可以嘗試改變用戶名:到用戶名:並查看它是否有效 – Satya

+0

@Satya,試過了。但是沒有變化。實際上,點擊提交按鈕,瀏覽器中的url沒有變化,如.../first.jsp?name = xxx –

+0

您的應用服務器正在運行嗎? – Satya

回答

1

我在您的代碼中看到多個問題。第一個是你把你的REST服務路徑的映射方式:

@Path("/hello{name}") 

我不認爲你可以連接你的兩個路徑參數,我認爲這是一個錯字,並期望這種映射是:

@Path("/hello/{name}") 

第二個問題是你的html代碼。您試圖將該名稱作爲FORM param發送,這對於POST請求非常有用,而對於GET請求則不適用。 GET請求期望URL或路徑中的參數,因爲您期望它在您的REST服務代碼中。

現在你有兩個選擇來糾正代碼。請將您的REST服務代碼方法從GET更改爲POST。或者,您可以從HTML中發送名稱作爲路徑參數,以正確地啓動您的服務並獲取參數。

如果將方法更改爲POST,則可能必須將參數更改爲FormParam而不是PathParam

+0

感謝您的回答,我按照您的建議對代碼進行了更改。但我得到「方法不允許」的錯誤 –

+0

@Optimus你能分享你的最新代碼嗎? –

+0

我編輯了更新的代碼。我認爲只有參數傳遞出現問題。 Firebug也沒有幫助 –

0

在您的代碼中將文本框的名稱更改爲名稱。 還要更改方法「@Path(」/ hello {name}「)」「之上的路徑。

嘗試使用此路徑和URL在HTML 「@路徑(」/測試 「)」

網址:/幫助臺/ REST /你好/測試

你好 - 是根類查找

試驗 - 是根類

參見鏈接「http://www.mastertheboss.com/resteasy/resteasy-tutorial-part-two-web-parameters」用於路徑PARAM和形式PARAM之間差方法取景

+0

嗨Veera,我的課程名稱是你好,方法名稱是你好所以你的意思是說,我的網址看起來像xx x:8080/helpdesk/rest/Hello/hello和Path註釋與方法 –

+0

但是當我這樣做,我得到404沒有找到 –

+0

它不是關於你的類名。它關於你正在給的路徑名。而不是你給路徑名稱「你好」。所以你的網址看起來像這樣「xxx:8080/helpdesk/rest/hello/hello」 – Veera