Java-сервлет не возвращает объект методу Angular $http.success

Я изучаю Angular.js. Я попытался выполнить поиск по многим существующим вопросам, но не смог найти ни одного подходящего вопроса или ответа.

Я отправляю запрос GET на сервлет Java и ожидаю от него объект. Вот угловой запрос $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 вот что я пишу в методе 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);**
}

Когда ответ возвращается от этого сервлета, он переходит к успеху службы $http в угловой части. Откуда я получу пользовательский объект, который я отправил с сервера.

Когда я добавляю console.log для печати данных, он печатает содержимое /html/index.html, куда я пересылаю.

Основываясь на моем исследовании, мой угловой код верен, но я неправильно устанавливаю настройки в сервлете Java. (Помогает ли это - Как получить доступ к возвращаемым значениям json в обратном вызове успеха действия angular.js)

Заранее спасибо.


person RajaM    schedule 26.02.2014    source источник


Ответы (2)


Вам нужно сериализовать свой объект User в строку JSON и поместить ее в тело ответа. Библиотека, такая как Джексон, может помочь, но прежде чем вы добавите это и запутаете себя, просто сериализуйте ее в строку JSON самостоятельно. Не забудьте установить заголовок Content-Type.

person Loc Nguyen    schedule 26.02.2014
comment
JSON — это хорошо, но как нам написать его для тела запроса в сервлете? - person RajaM; 26.02.2014
comment
Я давно не работал с API сервлетов напрямую, но это будет что-то похожее на response.getWriter().print({\name\: \RajaM\}). Кроме того, вам нужно использовать сервлеты? Если это не является бизнес-требованием, существуют более простые способы создания JSON API. - person Loc Nguyen; 27.02.2014
comment
Это действительно правильно. Я смог отправить JSON в angular. Только одно исправление: в дополнение к записи json в response.writer нам не нужно отправлять ни одно из представлений, иначе мы снова будем отправлять html-страницу в качестве данных. Нам просто нужно сбросить средство записи после установки ответа json. Спасибо Лок. - person RajaM; 27.02.2014

  1. Добавьте следующую строку в объект $http: headers: {'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");
});
person Nery Jr    schedule 16.12.2014