【问题标题】:Java Servlet not returning object to Angular $http.success methodJava Servlet 没有将对象返回给 Angular $http.success 方法
【发布时间】:2014-03-29 05:49:16
【问题描述】:

我正在学习 Angular.js。我尝试搜索许多现有问题,但找不到一个匹配的问题或答案。

我正在向一个 java servlet 发送一个 GET 请求,并期望从中得到一个对象。这是角度 $http GET 请求

        $http({
            method:'GET',
            url : '/JSONWebApp/json/?fqn=' + $scope.fqn
        }).
            success(function(data, status, header, config){
                console.log('Success');
                console.log("data - "+data);
                console.log("status - " + status);
                console.log("header - " + header);
                console.log("config - " + config);
            }).
            error(function(data, status, header, config){
                console.log('Error');
            });

在 java servlet 上,这是我在 doGet 方法中写的

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       System.out.println("Incoming Request URI : " + request.getRequestURI());

   **User user = new User();
         request.setAttribute("user", user);
   RequestDispatcher view = request.getRequestDispatcher("/html/index.html");
   view.forward(request, response);**
}

当从这个 servlet 返回响应时,它会在角度方面成功 $http 服务。我将从哪里获取我从服务器发送的用户对象。

当我添加 console.log 来打印数据时,它会打印 /html/index.html 内容,这是我要转发的地方。

根据我的研究,我的角度代码是正确的,但我在 java servlet 中的设置不正确。(这有帮助吗 - How to access json return values in angular.js action success callback

提前致谢。

【问题讨论】:

    标签: angularjs servlets angularjs-http


    【解决方案1】:
    1. 将以下行添加到 $http 对象: 标头:{'Content-Type': 'application/x-www-form-urlencoded'}

    2. 使用 POST 方法而不是 GET 方法:'POST'

    所以最后,我们想出了这样的东西:

    myData = {"name": "zezinho", "pass": "123xxx"};
    
    $http({
      method: 'POST',
      url: 'Login',
      data: myData,
      headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).success(function (data) {
      alert(data);
    }).error(function () {
      alert("login error");
    });
    

    【讨论】:

      【解决方案2】:

      您需要将您的 User 对象序列化为 JSON 字符串并将其放入响应正文中。像 Jackson 这样的库可以提供帮助,但在您添加它并让自己更加困惑之前,只需自己将其序列化为 JSON 字符串。不要忘记设置 Content-Type 标头。

      【讨论】:

      • JSON 很好,但我们如何将它写入 servlet 中的请求正文?
      • 我已经很长时间没有直接使用 servlet API,但它会类似于 response.getWriter().print("{\"name\": \"RajaM\"} ”)。另外,你需要使用 Servlet 吗?如果这不是业务需求,还有更简单的方法来创建 JSON API。
      • 这实际上是正确的。我能够将 JSON 发送到 Angular。只是一个更正:除了将 json 写入 response.writer 之外,我们不必分派到任何视图,否则将再次将 html 页面作为数据发送。我们只需要在将 json 设置为响应后清除 writer。谢谢Loc。
      猜你喜欢
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2015-09-04
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多