2015-12-04 3 views
-1

Наша команда разработчиков строит приложение, которое использует 6.2.0, 3.2.14, , 8 и в переднем конце мы используем . Наши реквизиции сделаны с помощью .Spring, Угловое JS и обработка исключений в уровне услуг

Приложение полностью создано для получения объектов в качестве отклика на наши заявки, потому что наши заявки через все сделаны через Ajax. В определенной функции приложения мы получаем регулярную заявку с использованием window.location = url, потому что нам нужно вернуть потоковое вещание, которое представляет собой не что иное, как массив байтов, содержащий содержимое файла PDF.

Это означает, что при создании этого PDF-файла у нас есть внутренняя ошибка, и наше приложение перенаправляет пользователя на пустой экран с напечатанным в нем объектом .

Я уже имел опыт в обработки исключений в глобальном случае НУ за исключением, используя обработку с ExceptionHandler аннотацию или за ControllerAdvice исключение обобщать обработки исключений, но всегда классам обработки в контроллере слоя с аннотацией Controller возвращает объект ModelAndView , но никогда классы в сервисном слое не аннулируются с Service.

Мой вопрос заключается в том, как захватить исключение и заставить приложение перенаправлять пользователей на экран ошибки с некоторым параметризованным сообщением, когда у нас есть регулярные запросы на получение.

ответ

0

В моем опыте, и даже если это не совсем ответ на вопрос, главная проблема не на стороне сервера, но на сторону клиента:

прекратить делать window.location = url загрузить Content-Disposition: прикрепленные файлы в приложении RIA. В частности, когда загрузка может вызывать ошибки, брошенные клиенту. действительно.

Libs like fileDownload (https://github.com/johnculviner/jquery.fileDownload) позволяет загружать файл в фоновом режиме, избегая беспорядка при добавлении ошибки и зависании пользовательского интерфейса, ожидая ответа сервера.

+0

Я уже использовал это в другом приложении. Я попробую тебя снова. –

0

Так позволяет сказать, что вы хотите, чтобы заботиться о исключения на стороне клиента на основе кода статуса HTTP, то вы можете сделать перехватчик как:

var app = angular.module('appname',[]); 

app.factory('myHandler', function ($injector) { 
    var interceptor = { 
     response: function (response) { 
      . 
      . 
      . 
      return response; 
     }, 
     responseError: function (response) { 

      if (response.status == 401) { 
       location.href = "#/error"; 
      } 

      else if(response.status == 403){...} 

      else if()..... 

      return response; 
     } 
    }; 
    return interceptor; 
}); 

и ввести его в приложение в виде:

app.config(function ($injector) {  
     $httpProvider.interceptors.push('myHandler'); 
     ... 
    }); 

теперь каждый запрос сначала должен быть здесь, проверить статус ошибки или все, что вы хотите, а затем, если нет ошибки (в этом случае вы не меняете location.href), она продолжается, магически, куда бы она ни шла указанный шаблонURL на основе routeProvider.

Полезные ссылки injector, httpProvider

+0

Я постараюсь сделать это, как вы сказали, но это мой первый опыт с угловыми, поэтому, возможно, я попробую другой подход к ответам, если это потребует много времени, но спасибо за ответ. –

+0

никаких проблем, хотя пометьте меня, если вы найдете другой путь. привет! –

+0

Вы понимаете португальский? Я получил особенно хороший ответ в переполнении португальского стека. –