【问题标题】:custom error message in ajax from spring controller来自spring控制器的ajax中的自定义错误消息
【发布时间】:2015-08-27 04:31:09
【问题描述】:

我有一个控制器,它返回一些对象,在不好的情况下,它应该将错误消息传输到 ajax 中的错误部分。 responseText 不接受,因为 tomcat 返回给我一个带有标签和完整堆栈跟踪的整个页面,但我只需要几句话就可以向用户显示此消息。

    @RequestMapping(value = {"/charts"}, method = RequestMethod.POST)
    @ResponseBody
    public Chart handleSelectionFiled(@RequestBody Chart chart) {

        try{
            chart.doSmth();
        } catch (Exception e) {
            //some code to transmit exception message - this is my question    
        }
        return chart;
     }

ajax函数

$.ajax({
        contentType: 'application/json',
        mimeType: 'application/json',
        type: frm.attr('method'),
        url: frm.attr('action'),
        dataType: 'json',
        data: data["chosenFile"],
        success: function (response) {
            turnOffPreLoader($("#defects_info"),response);
            $('#selectionForm').submit();

        },
        error: function (jqXHR, textStatus, errorThrown) {
            $("#result").text(errorThrown);
            turnOffPreLoader($("#defects_info"),"default:50");
        }
    });

【问题讨论】:

    标签: java javascript ajax spring servlets


    【解决方案1】:

    服务器端:

    @RequestMapping(value = {"/charts"}, method = RequestMethod.POST)
    @ResponseBody
    public Chart handleSelectionFiled(@RequestBody Chart chart, HttpServletRequest request, HttpServletResponse response) {
        try{
           chart.doSmth();
        } catch (Exception e) {
           response.setStatus(400);
           response.getWriter().write(e.getMessage());
        }
        return chart;
    }
    

    客户端:

    jQuery.ajax({// just showing how to handle error property
           error: function(jqXHR,error, errorThrown) {  
               if(jqXHR.status && jqXHR.status==400){
                    alert(jqXHR.responseText); 
               }else{
                   alert("Something went wrong");
               }
          }
    }); 
    

    通用 Ajax 错误处理

    如果我需要对所有 ajax 请求进行一些通用错误处理。我将设置 ajaxError 处理程序并在 html 内容顶部名为 errorcontainer 的 div 上显示错误。

    $("div#errorcontainer")
    .ajaxError(
        function(e, x, settings, exception) {
            var message;
            var statusErrorMap = {
                '400' : "Server understood the request, but request content was invalid.",
                '401' : "Unauthorized access.",
                '403' : "Forbidden resource can't be accessed.",
                '500' : "Internal server error.",
                '503' : "Service unavailable."
            };
            if (x.status) {
                message =statusErrorMap[x.status];
                                if(!message){
                                      message="Unknown Error \n.";
                                  }
            }else if(exception=='parsererror'){
                message="Error.\nParsing JSON Request failed.";
            }else if(exception=='timeout'){
                message="Request Time out.";
            }else if(exception=='abort'){
                message="Request was aborted by the server";
            }else {
                message="Unknown Error \n.";
            }
            $(this).css("display","inline");
            $(this).html(message);
       });
    

    【讨论】:

    • 更新代码,看看吧。
    • 没用,errorType - “未定义的错误”,responseText 为空
    • 你在哪里得到这个错误?在客户端/服务器端?你能显示堆栈跟踪吗?
    • 当然是在服务器上。愚蠢的问题。这个错误是什么意思?不是这个,这是java方法抛出的异常
    • 更改此声明response.getWriter().write(e.getMessage());
    猜你喜欢
    • 2022-10-13
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2016-02-13
    • 1970-01-01
    • 2015-12-22
    相关资源
    最近更新 更多