2012-08-01 77 views
1

路過這裏的目的是休息是我一個REST服務定義如下場景 :從JavaScript

@Path("/company/{companyName}/sessions") 
public class RESTSessionController { 

    RESTService service = new RESTService(); 
    @GET 
    @Produces({"application/json"}) 
    @Path("/{username}/{password}") 
    public Result getFriend(@PathParam ("companyName") String companyName , 
      @PathParam ("username") String username, 
      @PathParam ("password") String password){ 

     System.out.println(companyName); 
     return service.login(username,password); 
    } 
} 

要調用這個我有一個JavaScript如下:

$.ajax({ 
  url: 'http://localhost:8888/rest/company/hertz/sessions/amir/help', 
  dataType: 'json', 
  data: null, 
  success: function(data) { 
     $("#abc").html(dumpObj(data,"Result",'',0)); 
     } 
    }); 

該作品罰款,我得到這個回:

{"code":"200","description":"Amir is now logged in.","payload":{"@type":"xs:string","$":"Amir123"}} 

這是非常好的。

現在我想要去一步,使用對象打電話給我服務,所以我改變了我的代碼:

$.ajax({ 
    qObj={username:"Amir",password:"123",companyName:"hertz"} 
  url: 'http://localhost:8888/rest/company/', 
  dataType: 'json', 
  data: JSON.stringify(qObj), 
  success: function(data) { 
     $("#abc").html(dumpObj(data,"Result",'',0)); 
     } 
    }); 

而且它不會工作。

我的問題很簡單,我如何使用jquery/javascript在路徑(或沒有它)的參數中調用REST服務?

THX的幫助

阿米爾

+0

我知道這是脫離主題,但使用'GET'請求登錄用戶聽起來像一個非常糟糕的主意。 – JayC 2012-08-01 16:26:10

+0

我認爲他只是玩jquery,否則這是一個非常糟糕的做法,因爲密碼不是你所提到的之上的散列。 – Infinity 2012-08-01 16:34:17

+0

Jay,thx的評論,Quynh是對的,這只是我試圖建立我的框架,並確保我有我需要的所有我需要的,然後纔開始主應用程序。你的兩條評論都是關於使用GET和普通密碼的。 – 2012-08-01 17:57:55

回答

0

爲什麼你必須使用JSON.stringify?試試這個,讓我知道:)

$.ajax({ 
    url: 'http://localhost:8888/rest/company/', 
    dataType: 'json', 
    data: {username:"Amir",password:"123",companyName:"hertz"}, 
    success: function(data) { 
     $("#abc").html(dumpObj(data,"Result",'',0)); 
     } 
    }); 
+0

試過這個和結果相同。這是得到404頁未找到結果表格澤西島。 – 2012-08-01 17:56:09

+0

我在這裏看到4個參數/ hertz/sessions/amir/help,但您的數據只包含3. – Infinity 2012-08-01 18:05:49

+0

會話是路徑的一部分,它不是參數。 – 2012-08-01 18:14:22

1

找到了解決辦法 如果你正在尋找相同的答案這裏是我的發現: 1)您可以在路徑中使用的部分不是用戶變量您發送到REST服務的對象。所以在我的情況下{companyName}無法真正作爲json對象的一部分傳遞。 2)在方法聲明中它必須是一個指令,以指示方法需要一個JSON對象,這讓我改變了我的代碼的情況下:

@PUT 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/") 
public API_Session login(API_Session_Request request){ 

和所有工作就像一個魅力。

3)在javascript中,你應該使用JSON.stringify你的對象:

var qObj={username:"Amir",password:"123",company_name:"hertz"} 
$.ajax({ 
    type:'PUT', 
  url: 'http://localhost:8888/rest/company/sessions', 
  dataType: 'json', 
  data: JSON.stringify(qObj), 
    contentType: "application/json; charset=utf-8", 
  success: function(data) { 
     $("#abc").html(dumpObj(data,"Result",'',0)); 
     } 
    }); 

希望這可以幫助你節省一些時間。