es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Devuelva el tipo de cadena desde Spring Boot a Angular.

Estoy intentando devolver un valor de cadena desde Spring Boot a Angular, pero recibo un HttpErrorResponse cuando recibo el valor.

Intenté usar el tipo entero en Spring y el tipo de número y de esta manera funciona.

¿Alguien puede decirme qué estoy haciendo mal? Gracias.

El HttpErrorResponse que obtengo en console.log(resp) es:

HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: ‘OK’, url: ‘http://localhost:8080/login’, ok: false, …}
error: {error: SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse () at XMLHtt…, text: ‘user’}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: f}
message: “Http failure during parsing for http://localhost:8080/login”
name: “HttpErrorResponse”
ok: false
status: 200
statusText: “OK”
url: “http://localhost:8080/login”

Este es mi código:

login-form.component.ts:

login() {
let url = ‘http://localhost:8080/login’;
this.http.post(url, {
username: this.model.username,
password: this.model.password
}).subscribe(resp => {
console.log(resp);
switch(resp){
case “admin”: {
this.router.navigateByUrl(‘/actions’, { state: { username: this.model.username , role:’admin’ } });
break;
}
case “user”: {
this.router.navigateByUrl(‘/actions’, { state: { username: this.model.username , role:’user’ } });
break;
}
default:
alert(“La autenticación falló.”);
}
});
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema está en el formato de la respuesta enviada de Spring Boot a Angular. Según el registro de la consola, el formato parece ser texto plano en lugar de JSON. El cliente http por defecto de Angular espera que la respuesta esté en formato JSON, por lo que ocurre el error de SyntaxError al tratar de analizar la respuesta.

    Para solucionar el problema, tienes dos opciones:

    1. Devolver la respuesta como un objeto JSON desde Spring Boot. Puedes hacer esto envolviendo el valor de cadena en un objeto con una clave como { "message": "user" }. Luego, en tu código Angular, puedes acceder a la respuesta usando resp.message en lugar de resp.
    2. Modificar tu código Angular para manejar respuestas de texto plano. Para hacer esto, debes decirle al cliente http que la respuesta no debe ser analizada como JSON estableciendo responseType en "text", de la siguiente manera:

      this.http.post(url, data, { responseType: 'text' }).subscribe(resp => {
      console.log(resp);
      // manejar la respuesta como texto plano
      });
      

    Cualquiera de las opciones debería permitirte recibir y manejar correctamente la respuesta de Spring Boot en Angular.

Comments are closed.