Java AngularJS使用JAX-RSRESTWeb服务

Java AngularJS使用JAX-RSRESTWeb服务,java,angularjs,json,web-services,rest,Java,Angularjs,Json,Web Services,Rest,这是我第一次为我的web应用程序使用Java后端。我有一个Jax-rs Web服务,我正试图用我的AngularJS应用程序使用它 AngularJS呼叫 $http({ url : REST_END_POINT + '/checkuser', method : "GET", data : { 'userId' : credentials.username, 'pwd' : credentials.password }, d

这是我第一次为我的web应用程序使用Java后端。我有一个Jax-rs Web服务,我正试图用我的AngularJS应用程序使用它

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;
}
userId
pwd
总是
null

使用Firebug,我可以看到数据包含

Object{
    userId="aaa",
    pwd="aa"
}
我还尝试了
JSON.stringify
发送这些数据:

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

我认为您试图访问您的userID和pwd的方式是不正确的,您使用@QueryParam来查找userID和pwd作为GET请求的查询参数,如下所示:

如果您将GET请求更改为

$http({
url : REST_END_POINT + '/checkuser',
method : "GET",
params : {
    'userId' : credentials.username,
    'pwd' : credentials.password
},
dataType : "json",
headers : {
    "Content-Type" : "application/json"
}
});
那你应该有更多的运气


然而,我不会建议这种方法,因为它可能是不安全的。相反,我希望尝试使用现有的身份验证系统,而不是使用您自己的身份验证系统,因为这些现有的身份验证系统将更加安全。

我认为您尝试访问用户ID和pwd的方式是不正确的,您正在使用@QueryParam,它将查找userID和pwd作为GET请求的查询参数,如下所示:

如果您将GET请求更改为

$http({
url : REST_END_POINT + '/checkuser',
method : "GET",
params : {
    'userId' : credentials.username,
    'pwd' : credentials.password
},
dataType : "json",
headers : {
    "Content-Type" : "application/json"
}
});
那你应该有更多的运气


然而,我不会建议这种方法,因为它可能是不安全的。相反,我希望尝试使用现有的身份验证系统,而不是使用您自己的身份验证系统,因为这些现有的身份验证系统将更加安全。

您可以使用Jackson api将json转换为Java对象或从Java对象转换为json

Jackson包含简单的映射器方法,可以隐式地将json属性映射到Java类成员变量


您可以使用Jackson api将json转换为Java对象或从Java对象转换json,而不是使用@querypram,使用具有userId和pwd等字段的Java类

Jackson包含简单的映射器方法,可以隐式地将json属性映射到Java类成员变量



不要使用@QueryParam,而是使用一个Java类,该类的字段为userId和pwd

使用一个对象,该对象的字段为userId和pwd,而不是
@QueryParam
注释。这在您使用json时不使用。这是由NetBeans自动生成的。是否有另一种简单地通过指定参数发送json的方法?对象将是一个java类对象,其字段将映射到json的字段。您使用的是什么
rest
库?如果我一方面理解正确,您会说数据发送正确,但另一方面会说数据值为空。我会尝试打开我的浏览器开发工具,并检查网络选项卡的内部,您在请求中实际发送到后端的是什么。它帮助了我很多次:)使用带有userId和pwd字段的对象,而不是
@QueryParam
注释。这在您使用json时不使用。这是由NetBeans自动生成的。是否有另一种简单地通过指定参数发送json的方法?对象将是一个java类对象,其字段将映射到json的字段。您使用的是什么
rest
库?如果我一方面理解正确,您会说数据发送正确,但另一方面会说数据值为空。我会尝试打开我的浏览器开发工具,并检查网络选项卡的内部,您在请求中实际发送到后端的是什么。它帮助了我很多次:)那么,这种方法对
datatype:json
有什么意义吗?谢谢!它起作用了!我了解安全点,但它是一个旧的应用程序,我无法更改Web服务…@Apostolos确实不需要使用数据类型或标题(我尝试过)我有另一个方法,它使用
JAXBElement user
作为参数。我是否也应该这样做,并将用户的所有变量作为JSON发送?@Forbsey1现有的身份验证系统是什么?那么,使用这种方法,
datatype:JSON
有什么意义吗?谢谢!它起作用了!我了解安全点,但它是一个旧的应用程序,我无法更改Web服务…@Apostolos确实不需要使用数据类型或标题(我尝试过)我有另一个方法,它使用
JAXBElement user
作为参数。我是否也应该这样做,并将user的所有变量作为JSON发送?@Forbsey1现有的身份验证系统是什么?