quinta-feira, 1 de agosto de 2019

Como exibir mensagens de erros específicas para Constraints no Java

      Nesse post vou mostrar uma forma de pergar um erro mais específico a partir de uma Exception (nesse caso uma PersistenceException mas poderia ser qualquer outra). Estou assumindo que estamos em uma aplicação JSF e tentamos persistir uma informação que já existe no banco de dados e acaba violando uma constraint, então queremos exibir uma mensagem mais precisa ao usuário. Podemos fazer da seguinte forma:

... //declaração da classe e outras propriedades e métodos
 
private static final String MENSAGEM_PADRAO = "Não conseguimos consultar as informações, favor informar a área de negócio responsável.";

...

try{
    ...  //seu código
 
}catch ...{ //outros blocos catch

}catch (final PersistenceException e) {
            Exception cause = e;
            Integer count = 0;
            while (cause != null && cause.getMessage() != null
                    && cause.getMessage().contains("NOME_CONSTRAINT_BANCO")
                    || count == 10)
            {
                if ( cause != null )
                {
                    cause = (Exception) cause.getCause();
                }
                count += 1;
            }
            String mensagem = null;
            if ( cause != null && cause.getMessage() != null
                    && cause.getMessage().contains("NOME_CONSTRAINT_BANCO") )
            {
                mensagem = gerarMensagem("Sua mensagem");
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
                FacesMessage.SEVERITY_ERROR, mensagem, null));

            }
            mensagem = gerarMensagem(
                            MENSAGEM_PADRAO);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
                FacesMessage.SEVERITY_ERROR, mensagem, null));
        }
}catch (final Exception e)
{
    ...
}


Nenhum comentário:

Postar um comentário