2016-08-23 102 views
0

這是我第一次爲我的Web應用程序使用Java後端。我有我試圖用我的AngularJS應用AngularJS使用JAX-RS其他Web服務

AngularJS調用

$http({ 
    url : REST_END_POINT + '/checkuser', 
    method : "GET", 
    data : { 
     'userId' : credentials.username, 
     'pwd' : credentials.password 
    }, 
    dataType : "json", 
    headers : { 
     "Content-Type" : "application/json" 
    } 
}); 

Webservice的

@GET 
@Produces("application/json") 
@Consumes("application/json") 
@Path("checkuser/") 
public string getCheckUser(@QueryParam("userId") String userId, @QueryParam("pwd") String pwd){ 
    try{ 
     if(port != null){ 
      boolean result = port.checkUser(userId, pwd); 
      return new java.lang.Boolean(result).toString(); 
     } 
    }catch(Exception ex){ 
     //TODO 
    } 
    return null; 
} 

兩個userIdpwd總是null

以消耗JAX-RS web服務

使用Firebug我可以看到,數據包含

Object{ 
    userId="aaa", 
    pwd="aa" 
} 

我也試圖與JSON.stringify其中發送這些數據:

"{"userId":"aaa","pwd":"aa"}" 
+0

使用一個對象與字段用戶id和pwd和不'@ QueryParam'註釋。當你使用json時,這不會被使用。 – Apostolos

+0

這是NetBeans自動生成的。是否有另一種方法簡單地通過指定參數發送json?不是通過一個對象? – Weedoze

+0

對象將是一個java類對象,其字段將被映射到json的字段。你在用什麼'休息'圖書館? – Apostolos

回答

2

我相信你試圖訪問你的用戶ID和PWD的方式不正確,您正在使用的@QueryParam這將查找用戶ID和PWD像這樣的GET請求的查詢參數:

http://myservice:port/checkuser?userId=myuserid&pwd=pass

如果您將GET請求更改爲

$http({ 
url : REST_END_POINT + '/checkuser', 
method : "GET", 
params : { 
    'userId' : credentials.username, 
    'pwd' : credentials.password 
}, 
dataType : "json", 
headers : { 
    "Content-Type" : "application/json" 
} 
}); 

然後,您應該有更多的運氣。

但是我不會建議這種方法,因爲它可能是不安全的。相反,我會考慮嘗試利用現有的身份驗證系統,而不是滾動您自己的身份驗證系統,因爲這些現有的身份驗證系統會更安全。

+0

那麼,這種方法對於'datatype:json'有沒有意義? – Apostolos

+0

謝謝!有用 !我瞭解安全點,但它是一箇舊的應用程序,我不能改變webservice ... – Weedoze

+0

@Apostolos事實上,沒有必要使用數據類型和頭文件(我試過) – Weedoze

0

您可以使用Jackson API將json轉換爲/從Java對象。

Jackson包含簡單的映射器方法來隱式地將您的json屬性映射到Java類成員變量。

相反@querypram的使用具有字段用戶id和pwd一個Java類