Jasper reports 服务层中的Spring、Angular JS和异常处理

Jasper reports 服务层中的Spring、Angular JS和异常处理,jasper-reports,spring-mvc,java-ee-7,tomcat,angularjs,rest,ajax,json,java,Jasper Reports,Spring Mvc,Java Ee 7,Tomcat,Angularjs,Rest,Ajax,Json,Java,我们的开发团队正在构建一个应用程序,它使用6.2.0、3.2.14、8以及我们使用的前端。我们的请购单都是通过 应用程序完全是为了接收对象作为请求的响应而构建的,因为我们的请求都是通过Ajax完成的。在特定的应用程序功能中,我们使用window.location=url定期获取请求,因为我们需要返回一个流,它只不过是一个包含PDF文件内容的字节数组 也就是说,当我们在生成此PDF文件时出现后端错误时,我们的应用程序会将用户重定向到一个带有打印对象的空白屏幕 我已经有过针对每个异常情况全局处理异常

我们的开发团队正在构建一个应用程序,它使用6.2.0、3.2.14、8以及我们使用的前端。我们的请购单都是通过

应用程序完全是为了接收对象作为请求的响应而构建的,因为我们的请求都是通过Ajax完成的。在特定的应用程序功能中,我们使用
window.location=url
定期获取请求,因为我们需要返回一个流,它只不过是一个包含PDF文件内容的字节数组

也就是说,当我们在生成此PDF文件时出现后端错误时,我们的应用程序会将用户重定向到一个带有打印对象的空白屏幕

我已经有过针对每个异常情况全局处理异常的经验,使用带注释的异常处理或per来概括异常处理,但总是在控制器层中处理带有返回对象注释的类,而在服务层中从未处理带有注释的类


我的问题是,当我们有常规的get请求时,如何捕获异常并使应用程序将用户重定向到带有一些参数化消息的错误屏幕。

根据我的经验,即使这不是问题的确切答案,但主要问题不是服务器端,而是客户端:

停止执行
window.location=url
下载RIA应用程序中的内容处置:附件文件。尤其是当下载可能导致错误抛出到客户端时。真的


像fileDownload()这样的Libs允许在后台下载文件,避免了错误追加时的所有混乱,以及等待服务器响应时的UI冻结。

因此,假设您希望根据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),它将继续,神奇地转到它要去的任何地方,或者转到基于routeProvider的指定templateURL


有用的链接,

我已经在另一个应用程序中使用过。我会再次尝试你的方法。我会按照你说的那样尝试,但这是我第一次体验angular,所以如果这占用了我很多时间,也许我也会尝试另一种回答方法,但谢谢你的回答。你懂葡萄牙语吗?我用葡萄牙语得到了一个特别好的答案。