显示错误的Http请求的烤面包机错误

时间:2019-07-16 17:57:26

标签: json angular typescript error-handling

我正在尝试捕获由Angular中的Web API引发的错误,在某些情况下,我将不会显示用户友好的错误消息。给定下面的响应正文,我将如何访问字符串“必须附加PE和所有者签名才能获得提交状态”?

{
  "data": {
    "model.WorkflowStepId": [
      "PE and Owner Signature must be attached for a status of Submitted"
    ]
  },
  "exceptionType": "FieldValidation"
}

到目前为止,这是我所拥有的,但是由于当前仅显示字符串“ model.WorkflowSetId”,所以我陷入了困境。

this.spinner = this.certService.updateCert(this.damId, this.certId, this.model)
      .subscribe(response => {
        ...
      }, 
      (errorRes: HttpErrorResponse) => {
        if (errorRes.error && errorRes.error.exceptionType === 'FieldValidation') {
          const errors = errorRes.error.data;
          for(let error in errors)
            this.notificationService.error(error);
        } else {
          console.log(errorRes);
          this.notificationService.error('An unknown error has occured. Please try again.');
        }
      });

2 个答案:

答案 0 :(得分:2)

您可以简单地这样做:

if (errorRes.error && errorRes.error.exceptionType === 'FieldValidation') {
   this.notificationService.error(errorRes.error.data.model.WorkflowStepId[0]);
}

答案 1 :(得分:0)

因此,事实证明“ model.WorkflowStepId”实际上是一个字符串。为了捕获它和其他类型的验证错误,我能够遍历错误的请求,构建一个将相同类型的字段验证错误分组为单个消息的字符串,然后使用烤面包机向用户显示这些消息。

if (errorRes.error && errorRes.error.exceptionType === 'FieldValidation') {
    for (var key in errorRes.error.data) {
        for (var i = 0; i < errorRes.error.data[key].length; i++) {
            errorStr += (errorRes.error.data[key][i]);
            errorStr += ". ";
        }    
        this.notificationService.error(errorStr);
    }
}