error-handling - 创建通话后显示后端错误消息

标签 error-handling odata sapui5

在我的 Controller 中,我有以下代码-问题是出现错误时,我想显示从后端传递来的确切错误。但是在我的错误处理函数中,我从未获得任何数据。怎么了

Controller.js

var token = null;
$.ajax({
    url: sServiceURl,
    type: "GET",
    async: true,
    beforeSend: function(xhr) {
        sap.ui.core.BusyIndicator.show(0);
        xhr.setRequestHeader("X-CSRF-Token", "Fetch");
    },
    complete: function(xhr) {
        token = xhr.getResponseHeader("X-CSRF-Token");
        oContext.OdataModel.create("/materialsSet", oContext.Data, null, oContext.submitSuccess.bind(oContext), oContext.submitError.bind(oContext));
    }
});

submitSuccess: function(data, response, oContext) {
     // works fine 
},
submitError: function(oError) {
   // I never get anything in oError, so the below code is useless.
    try {
        if (oError.responseText) {
            obj = JSON.parse(oError.responseText);
            message = obj.error.message.value;
        } else if (oError.response.body) {
            var errorModel = new sap.ui.model.xml.XMLModel();
            errorModel.setXML(oError.response.body);
            //Read message node
                    if (errorModel.getProperty("/0/message") !== "") {
                        message = errorModel.getProperty("/0/message");
                    } else {
                        message = message1;
                    }
                } else {
                    message = message1;
                }
            } catch (error) {
                message = message1;
            }
            sap.m.MessageToast.show(message);
        },

最佳答案

希望这对您有帮助,首先检查后端响应。我已将以下代码用于错误处理

submitError: function(responseBody) {
    try {
        var body = JSON.parse(responseBody);
        var errorDetails = body.error.innererror.errordetails;
        if (errorDetails) {
            if (errorDetails.length > 0) {
                for (i = 0; i < errorDetails.length; i++) {
                    console.log(errorDetails[i].message);
                }
            } else
                console.log(body.error.message.value);
        } else
            console.log(body.error.message.value);
    } catch (err) {
        try {
            //the error is in xml format. Technical error by framework
            switch (typeof responseBody) {
                case "string": // XML or simple text
                    if (responseBody.indexOf("<?xml") > -1) {
                        var oXML = jQuery.parseXML(responseBody);
                        var oXMLMsg = oXML.querySelector("message");
                        if (oXMLMsg)
                            console.log(oXMLMsg.textContent);
                    } else
                        console.log(responseBody);

                    break;
                case "object": // Exception
                    console.log(responseBody.toString());
                    break;
            }
        } catch (err) {
            console.log("common error message");
        }
    }
}

关于error-handling - 创建通话后显示后端错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52617772/

相关文章:

serialization - 流利的Nhibernate实体序列化错误列表

javascript - 当响应返回适当的错误消息React时处理提取错误

spring - Spring SecurityContext在页面上找不到null错误

c# - 如何在 C# 中解析 OData $filter

css - 动态更改 Micro Chart – sap.m.CustomTile 中的 Harvey Ball 大小

google-chrome - UI5 TileContainer 在 Chrome 中是空白的

json - UI5 XML View 与 JSON View 分组列表

php - Laravel将可变成功消息从存储库传递回 Controller

wcf - 在运行时更改使用基本身份验证的 OData/WCF 数据服务的连接字符串

odata - OData 的 Azure API 管理问题