2017-01-03 106 views
-2

任何人都可以告訴我如何從簡單終端客戶端調用發佈請求嗎?來自簡單終端客戶端的澤西POST請求

@POST 
    @Path("insertt") 
    public void insert(@QueryParam("id") Integer id, 
         @QueryParam("name") String name, 
         @QueryParam("lastname") String lastname, 
         @QueryParam("adress") String adress, 
         @QueryParam("city") String city) { 
     Customer cust = new Customer(); 
     cust.setCustomerId(id); 
     cust.setName(name); 
     cust.setLastNAme(lastname); 
     cust.setAddressline1(adress); 
     cust.setCity(city); 
     customerDAO.add(cust); 
    } 

在客戶端我做的:

Client c = ClientBuilder.newClient(); 
WebTarget resource = c.target("http://localhost:8080/WebService/webresources/generic/insertt?id=100&name=test&lastname=test&adress=test&city=test"); 
//resource.request().post(); // This does not work 
+0

測試,什麼不起作用?你看到哪個例外? –

+1

你嘗試過curl命令嗎? –

+0

@MaximDobryakov我沒有看到任何異常,我只是不知道如何發送來自客戶端的請求。我有網址和資源,但是如何從客戶端發送請求? – kvway

回答

1
  1. 因爲你想發送POST數據@QueryParam不會起作用,因爲POST數據會請求體發送,而不是作爲查詢參數(即不要在URL中附加像你一樣)。所以,你必須改變你的資源的方法如下:

    @POST 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    @Path("insertt") 
    public void insert(@FormParam("id") Integer id, 
            @FormParam("name") String name, 
            @FormParam("lastname") String lastname, 
            @FormParam("adress") String adress, 
            @FormParam("city") String city) { 
    
    Customer cust = new Customer(); 
    cust.setCustomerId(id); 
    ... 
    customerDAO.add(cust); 
    

    }

  2. ,改變你的客戶端如下:

    Client client = ClientBuilder.newClient(); 
    WebTarget target = client.target("http://localhost:8080/WebService/webresources/generic").path("insertt"); 
    Form form = new Form().param("id", "100").param("name", "test").param("lastname", "test").param("address", "test").param("city", "test"); 
    Response response = target.request().post(Entity.form(form)); 
    

這個例子僅僅是模擬一個HTML表單提交。如果您想以XML或JSON或其他任何形式發送數據,則必須查看JAX-RS文檔。網絡上有很多資源;這裏有一些例子網站:

注:例如與新澤西2.23和Wildfly 8.2.1

0

使用curl命令記錄here

...使用curl發佈此表格填寫和以前相同的數據,我們 可以這樣做:

curl --data「birthyear = 1905 & press =%20OK%20「 http://www.example.com/when.cgi這種POST將使用 Content-Type應用程序/ x-www-form-urlencoded,並且是使用POST類型的最廣泛的 。

您發送給服務器的數據必須已經正確編碼,捲曲 不會爲你做。例如,如果你想要的數據包含 一個空間,需要有20%等未能 這種符合將最有可能導致被錯誤地接收 和搞砸了你的數據替換空間。

最近捲曲的版本其實是可以爲您進行urlencode POST數據,像這樣 :

捲曲--data-進行urlencode「NAME =我是丹尼爾」 http://www.example.com如果 你重複--data幾次命令行中,將捲曲串聯 所有給定的數據塊 - 並且把 每個數據段之間的「&」符號。