【问题标题】:AngularJS consumes JAX-RS rest web serviceAngularJS 使用 JAX-RS REST Web 服务
【发布时间】:2016-08-23 11:14:36
【问题描述】:

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

AngularJS 调用

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

网络服务

@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

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

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

我也尝试使用JSON.stringify 发送这些数据:

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

【问题讨论】:

  • 使用带有字段 userId 和 pwd 的对象,而不是 @QueryParam 注释。消费 json 时不要使用。
  • 这是由 NetBeans 自动生成的。是否有另一种方法可以通过指定参数来发送 json?不是通过对象?
  • object 将是一个 java 类对象,其字段将映射到 json 的字段。你在用什么rest 库?
  • 如果我理解正确,一方面你说数据发送正确,但在另一个后端说数据值为空。我会尝试打开我的浏览器开发工具并在网络选项卡中检查您在请求中实际发送到后端的内容。它帮助了我很多次:)

标签: java angularjs json web-services rest


【解决方案1】:

我认为您尝试访问用户 ID 和密码的方式不正确,您正在使用 @QueryParam 来查找用户 ID 和密码作为 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"
}
});

那你应该有更多的运气。

但是我不建议使用这种方法,因为它可能不安全。相反,我会考虑尝试利用现有的身份验证系统,而不是自行开发,因为这些现有的身份验证系统会更加安全。

【讨论】:

  • 那么,datatype: json 这种方法有什么意义吗?
  • 谢谢!有用 !我了解安全点,但它是一个旧应用程序,我无法更改网络服务...
  • @Apostolos 确实没有必要既不使用 dataType 也不使用 headers(我试过了)
  • 我有另一种使用JAXBElement<User> user 作为参数的方法。我应该做同样的事情并将用户的所有变量作为 JSON 发送吗?
  • @Forbsey1 现有的认证系统有哪些?
【解决方案2】:

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

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

使用具有 userId 和 pwd 字段的 Java 类代替 @querypram

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多