我正在使用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");
});
请帮助......提前致谢
答案 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);
}
如果未定义,它只会拒绝响应。它解决了我的问题。