Tengo esta parte del código en mi aplicación.
addComment (body: Object): Observable<Comment[]> { //let bodyString = JSON.stringify(body); // Stringify payload let bodyString = JSON.parse(JSON.stringify(body || null )) let headers = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON let options = new RequestOptions({ headers: headers }); // Create a request option return this.http.post(this.commentsUrl, bodyString, options) // ...using post request .map((res:Response) => res.json()) // ...and calling .json() on the response to return data .catch((error:any) => Observable.throw(error.json().error || 'Server error')); //...errors if any }Cuando intento agregar un comentario en mi aplicación, arroja un error como el siguiente:
POST http://localhost:4200/assets/comments.json 404 (Not Found) SyntaxError: Unexpected token C in JSON at position 0¿Puede ayudarme alguien?
Totalmente pila SyntaxError:
SyntaxError: Unexpected token C in JSON at position 0 at Object.parse (<anonymous>) at Response.Body.json (body.js:24) at CatchSubscriber.selector (comment.service.ts:41) at CatchSubscriber.error (catch.js:104) at MapSubscriber.Subscriber._error (Subscriber.js:128) at MapSubscriber.Subscriber.error (Subscriber.js:102) at XMLHttpRequest.onLoad (xhr_backend.js:82) at ZoneDelegate.webpackJsonp.1301.ZoneDelegate.invokeTask (zone.js:363) at Object.onInvokeTask (ng_zone.js:264) at ZoneDelegate.webpackJsonp.1301.ZoneDelegate.invokeTask (zone.js:362) at Zone.webpackJsonp.1301.Zone.runTask (zone.js:166) at XMLHttpRequest.ZoneTask.invoke (zone.js:416)Estaba enfrentando exactamente el problema.
Solo cambia:
error.json()a
JSON.parse(JSON.stringify(error))Es posible que haya repetido algo que comienza con C como Conectado . ¡Debe repetir solo la respuesta json y no cualquier cadena en general!
Estaba teniendo problemas similares. Descubrí que la función de tipo de retorno de Spring Boot no era compatible con Angular. El tipo de devolución de la función fue ResponseEntity<String> .
return ResponseEntity.ok().body(new String("Some Message")); Lo cambié a ResponseEntity<ResponseMessage> y modifiqué el retorno como
return ResponseEntity.status(HttpStatus.OK).body(new ResponseMessage("Some Message")); Y funcionó. La clase ResponseMessage contenida
public class ResponseMessage { private String message; public ResponseMessage(String message) { this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }Gracias a la comunidad de Stackoverflow. Esta es mi primera respuesta.