没有执行angularJs的错误块

时间:2014-06-18 10:04:36

标签: javascript json spring angularjs

我正在使用angularJS和spring 3.2.4进行REST异常处理和处理这样的异常

 @ExceptionHandler(MethodArgumentNotValidException.class)
     @ResponseStatus(value=HttpStatus.BAD_REQUEST)
     @ResponseBody
     public ErrorFormInfo handleMethodArgumentNotValid(HttpServletRequest req, MethodArgumentNotValidException ex, HttpServletResponse response) {

             String errorMessage = "gender sring is out of range";
             String errorURL = req.getRequestURL().toString();
             System.out.println("Throwing exception from exception handler");
             ErrorFormInfo errorInfo = new ErrorFormInfo(errorURL, errorMessage);
             return errorInfo;
     }

每当发送参数验证失败时,它抛出一个MethodArgumentNotValidException并纠正我,如果我错了,spring 3.2自动转换json格式的对象 但是我无法在angularJs的错误块中获取对象。它抛出错误说"响应未定义"使用此输出

completeRequest(callback=done(status, response, headersString), status=400, response="{"errorMessage":"http:/...sring is out of range"}", headersString="Server: Apache-Coyote/1...MT\r\nConnection: close\r\n")angular-1.0.7.js (line 9333)
onreadystatechange()

我怀疑该对象没有被转换为JSON,因为它有奇怪的标题字符串。

以下是我的JS代码

 $http.post('rest/create?cd=' + (new Date()).getTime(),
                            XYZ
                    .success(function(data) {
    alert('Data added successfully');                                               
                            }).error(function(data) {   
                                var errorInfo = data;
                                alert("data from server side"+errorInfo.errorMessage);
                        alert("Unable to process");
                    });

请帮助......提前致谢

1 个答案:

答案 0 :(得分:1)

在angularJs的 $ httpProvider 服务中注入了一个拦截器,只为成功和错误而运行。所以我在承诺中写了一段代码来处理响应'undefined' 案件。代码如下:

 if(jsonStr.ERROR_URI != 'undefined')
      {
            var jsonStr = response.data;    
            console.log('inside error block');  
            console.log('response.status'+response.status); 
            console.log('response.data'+response.data); 
            console.log('response.data.ERROR_URI'+jsonStr.ERROR_URI);
            return $q.reject(response);
      }

如果未定义,它只会拒绝响应。它解决了我的问题。