Sou novo programando com Java em geral e me surgiu uma dúvida. Tenho um projeto onde o Spring Boot é usado como API/backend. Minha dúvida é: quando ocorre um erro no banco de dados (por exemplo, na hora de salvar/deletar um registro ele me retorna erro de integridade) como posso passar isso através de uma API para que o frontend entenda o que está acontecendo?
Eu suponho que sua API será json (não vi muitos detalhes na pergunta), mas o que eu faço sempre é tratar a exception no método de controller (isso quando realmente não tem como tratar um erro).
Sugiro que você faça mais validações pra garantir que não haja erro de integridade no seu banco.
Ola amigo. Sou Javeiro nivel pleno e trabalho mais com webservices em json.
sugiro que monte as camadas de controller, service e repository. (Basico)
em servico faça um teste no banco conforme abaixo. Voce pode usar o teste sempre que quiser porem fica mais eficiente testar antes do usuario fazer login. caso tenha um retorno false vc ja pode lancar uma mensagem informando que o banco não esta respondendo.
Ahhhh esqueci de falar o que o codigo faz. ele busca um registro qualquer em uma tabela. sugiro que crie uma tabela so pra isto.
ele vai la e consulta neste caso um ID qualquer.
se retornar uma consulta simples quer dizer que o banco de dados esta no ar. ; )
se nao conseguir entra na catch e retorna false e nao para sua aplicação.
Obs. neste caso testei em uma chave que é uma String porem a maioria das chaves sao numericas entao em vez de “1” vai ter que mandar 1 ou 1L dependendo do seu tipo
Eu faco assim, uma mistura das respostas que ja tiveram aqui. Voce pode fazer os testes na camada de servico, e disparar uma exceção. Entao voce vai criar varias exceções do tipo runtimexception. Por exemplo, EntidadeJaCadastradaException, ImpossivelExcluirException, etc…
fazendo isso voce precisara de duas classes, uma sera uma handleException. Essa classe ira lidar com as exceções e criarar um modelo de mensagem de erro, essa sera a segunda classe que voce precisara. Assim toda vez que voce criar uma nova exceção voce vai adiciona-la ao handlerException. Segue abaixo o codigo.
public class DetalheErro implements Serializable {
private static final long serialVersionUID = 1L;
private Integer statusCode;
private String statusMessage;
private String httpMethod;
private String erro;
private String detalhe;
private String path;
public int getStatusCode() {
return statusCode;
}
public String getStatusMessage() {
return statusMessage;
}
public String getHttpMethod() {
return httpMethod;
}
public String getErro() {
return erro;
}
public String getDetalhe() {
return detalhe;
}
public String getPath() {
return path;
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private DetalheErro erro;
Builder() {
this.erro = new DetalheErro();
}
public Builder addStatus(HttpStatus status) {
this.erro.statusCode = status.value();
this.erro.statusMessage = status.getReasonPhrase();
return this;
}
public Builder addHttpMethod(String method) {
this.erro.httpMethod = method;
return this;
}
public Builder addErro(String erro) {
this.erro.erro = erro;
return this;
}
public Builder addDetalhe(String detalhe) {
this.erro.detalhe = detalhe;
return this;
}
public Builder addPath(String path) {
this.erro.path = path;
return this;
}
public DetalheErro build() {
return this.erro;
}
}
}