Como imprimir a mensagem de erro no Angular? - Stack Overflow em Português
Gostariam que percebessem que existe a mensagem de erro do Usuário e do Desenvolvedor, o que estou precisando é da mensagem de erro do Usuário representado como mensagemUsuario e nela está escrito "Nome do estilo já cadastrado"
Essa mensagem de erro foi disparado pela minha API Angular, infelizmente sou inciante como programador Angular, a mensagem que deveria ser emita não seria essa da figura abaixo, tinha que ser a mensagem que está na API Java como "Nome do estilo já cadastrado", essa mensagem de erro como podem ver na figura abaixo é uma mensagem genérica, ou seja, minha API Angular não sabe distinguir as mensagens de erro, e por conta disso qualquer erro que aparece no sistema ela sempre vai emitir essa mensagem de erro da figura abaixo, pois é exatamente isso que não quero.
export class ErroHandlerService {
constructor(private toasty: ToastyService) { }
handle(errorResponse: any) {
if (typeof errorResponse === 'string') {
msg = errorResponse;
msg = 'Erro ao processar serviço remoto. Tente novamente.';
console.error('Ocorreu um erro', errorResponse);
this.toasty.error(msg);
import { NotAuthenticatedError } from './../seguranca/money-http';
export class ErrorHandlerService {
} else if (errorResponse instanceof NotAuthenticatedError) {
msg = 'Sua sessão expirou!';
} else if (errorResponse instanceof Response
&& errorResponse.status >= 400 && errorResponse.status <= 499) {
msg = 'Ocorreu um erro ao processar a sua solicitação';
if (errorResponse.status === 403) {
msg = 'Você não tem permissão para executar esta ação';
errors = errorResponse.json();
msg = errors[0].mensagemUsuario;
Você pode perceber que abaixo do Response tem o "Ok": false, logo abaixo tem o status: 400, mais baixo tem o statusText: "Ok", depois vem o type: 2, em seguida vem o url:"http://localhost:8080/estilos", por final o _body: "[{"mensagemUsuario":"Nome do estilo já cadastrado","mensagemDesenvolvedor":"com.algaworks.brewer.service.exception.NomeEstiloJaCadastradoException"}]
Eu tentei realizar a verificação assim, mas gerou erro no type === 2
else if (errorResponse instanceof Response && errorResponse.type === 2){
Seguindo a sugestão de Pedro, colocando
.catch(erro => this.erroHandler.handle(console.log(erro)));
editada 18/01/18 às 17:48
perguntada 18/01/18 às 9:23
Cara você verificou se essa condição if (typeof errorResponse === 'string') é verdadeira? Pode copiar o código da chamada da função ErroHandlerService.handle
editada 18/01/18 às 14:34
respondida 18/01/18 às 14:28
Cara vi aqui teu repositório (agora que vi que você tinha colocado o link), foi como eu havia falado, no "estilo-cadastro.component.ts" na linha 39 você está passando o objeto erro, na verdade você teria que passar apenas a msg
– Pedro Cruz
18/01/18 às 16:14
Eu não entendi muito bem, mas minha sugestão seria essa trocar .catch(erro => this.erroHandler.handle(erro)); para .catch(erro => this.erroHandler.handle(erro._body.mensagemUsuario));
18/01/18 às 17:04
O console.log(erro._body.mensagemUsuario) é no estilo-cadastro.component.ts, algo como isso .catch(erro => {console.log(erro._body.mensagemUsuario);this.erroHandler.handle(erro._body.mensagemUsuario));}
18/01/18 às 17:25
Certo vi aqui que o seu _body é um array então tente isso .catch(erro => {console.log(erro._body[0].mensagemUsuario);this.erroHandler.ha‌​ndle(erro._body[0].mens‌​agemUsuario));}
18/01/18 às 17:30
tenta esse cara .catch(erro => this.erroHandler‌​.ha‌​ndle(erro.json().mensagemUsuario))
18/01/18 às 17:56
A alteração tem que ser feita somente no método adicionar no arquivo estilo.service.ts com essa alteração o gerenciador de erros fica responsável em dá um get na mensagem de erro da API Java, ela já tinha sido configurada para isso mesmo.