Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

ErrorHandler para meu Foreign Key

Olá estou escrevendo uma API Rest e criei duas entidades, Usuario e Curso. Criei uma relação bidirecional entre as duas sendo a Usuario @OneToMany e a curso @ManyToOne. Até ai tudo bem e funcionando, acontece que se eu tento passar um POST para o endpoint cursos com um usuario inexistente ele me retorna:

2021-02-22 20:50:51.906 ERROR 12768 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause

Eu acredito que deva retornar um status 400 de BAD REQUEST, como fizemos no curso, mas essa exceção que recebi é bem genérica, não da pra usar a MethodArgumentNotValidException. ela só me informa que o campo usuario_id que deveria ter algum valor, está NULL por que o usuário não existe.

Agradeço por qualquer ajuda!

2 respostas
solução!

Oi Guilherme,

Nesse caso seria uma validação de regra de negócio, não permitindo na API que se cadastre um curso sem o id do usuário ou com um id inexistente.

O ideal é no cadastro de curso você realizar uma validação, consultando se no banco de dados existe um usuário com o id informado, e caso contrário devolver um erro 400 para o cliente.

Bons estudos!

Obrigado Rodrigo! Eu criei um handler (bem feio por sinal) para tratar a SQLException e dependendo do erro que recebesse, devolver a mensagem correta, só para não retornar 500. Deveria ter feito isso ai mas era parte de um challenge e já enviei rsrs.