web-dev-qa-db-ja.com

Angular 6:HttpErrorResponse SyntaxError:JSONの予期しないトークン

私はリクエストを投稿していますが、応答として「成功」の文字列を受け取ることになっています。下の画像に掲載されている次の情報を含むHttpResponseErrorを取得しています。

enter image description here

PurchaseOrderService

postPurchaseOrderCustom(purchaseOrderCustom: PurchaseOrderSaveCustom) {
 const url = `${this.localUrl}purchaseOrderCustom`;
 return this.http.post<String>(url, purchaseOrderCustom, {headers: this.header})
            .pipe(
                   catchError(this.handleError('postPurchaseOrderCustom', 'I am an error'))
                 );
  }

PurchaseOrderComponent

this.purchaseOrderService.postPurchaseOrderCustom(purchaseOrderCustom).subscribe( response => {
  console.log("Testing", response);
  },
  error => {
    console.error('errorMsg',error );   
  }

私がそれをしている方法は、ドキュメントで行っている方法と同じです。私が間違っていることを指摘してください。

error shown when I implement answer provided by @Muhammed

9
user3701188

これは、API応答タイプに関連する、successは有効なjson形式ではありません。デフォルトでは、HttpClientはjson応答タイプであり、後で解析しようとします。これを解決するには、応答タイプをtextに設定します

    return this.http.post<String>(url, purchaseOrderCustom, 
          {headers: this.header , responseType:'text'})
          .pipe (catchError(this.handleError('postPurchaseOrderCustom', 'I am an error')));
9
malbarmawi

既に述べたように、これはサーバーからの応答に関係しています。

私の場合、これを返すSpring Bootアプリケーションがありました。

return new ResponseEntity<>("Your SSN was generated successfully", HttpStatus.OK);

これは、Angular end:

{error: SyntaxError: Unexpected token Y in JSON at position 0
at JSON.parse (<anonymous>)
at XMLHtt…, text: "Your SSN was registered successfully."}

だから私がやったのは、Spring BootアプリケーションでカスタムCustomHttpResponseクラスを作成してから、コントローラーのコードを次のように変更することでした。

        ...
        CustomHttpResponse customHttpResponse = new CustomHttpResponse();
        customHttpResponse.setMessage("Your SSN was registered successfully.");
        customHttpResponse.setStatus(HttpStatus.OK.value());

        return new ResponseEntity<>(new Gson().toJson(customHttpResponse), 
                                          HttpStatus.OK);
        }

今私はこれを得ています:

{message: "Your SSN was registered successfully.", status: 200}
   message: "Your SSN was registered successfully."
       status: 200

基本的に、このエラーはAngularがJSONを予期しているが、代わりに何かを取得する場合に発生します

2