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 (
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
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ó.”);
}
});
}
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 deSyntaxError
al tratar de analizar la respuesta.Para solucionar el problema, tienes dos opciones:
{ "message": "user" }
. Luego, en tu código Angular, puedes acceder a la respuesta usandoresp.message
en lugar deresp
.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 estableciendoresponseType
en"text"
, de la siguiente manera:Cualquiera de las opciones debería permitirte recibir y manejar correctamente la respuesta de Spring Boot en Angular.