1
resposta

Mensagem do exception

Fiquei em dúvida, no service foi passada a msg "pet já adotado" e no controller aparentemente foi pego outra msg do properties, pq foram colocadas duas mensagens? e pq a 1a passou e a segunda não? Enfrentei esse problema no meu código, em que lancei o erro mas só vem a msg do controller.

1 resposta

Olá, Rodrigo!

No código do AdocaoService, são lançadas três exceções diferentes, cada uma com sua respectiva mensagem:

  1. "Pet já adotado"
  2. "Pet com adoção em andamento"
  3. "Tutor com máximo de adoções"

No caso do AdocaoController, o método solicitar() está configurado para capturar apenas uma exceção do tipo IllegalStateException, que é a exceção lançada quando o pet já foi adotado ou quando o tutor já atingiu o máximo de adoções permitidas.

Por isso, quando você tenta adotar um pet que já foi adotado ou um tutor que já atingiu o máximo de adoções, a exceção é capturada e a respectiva mensagem é retornada.

No entanto, quando você tenta adotar um pet que está com uma adoção em andamento, a exceção lançada é do tipo UnsupportedOperationException. Como o método solicitar() do AdocaoController não está configurado para capturar esse tipo de exceção. A exceção será propagada pela pilha de chamadas até "explodir". E será impresso um rastreamento de pilha (stack trace) no console da aplicação.

Para resolver esse problema, uma das soluções é você poder adicionar um novo bloco catch no método solicitar() do AdocaoController para capturar a exceção UnsupportedOperationException. Veja como ficaria:

@PostMapping
@Transactional
public ResponseEntity<String> solicitar(@RequestBody @Valid SolicitacaoDeAdocaoDTO dados){

    try {
        this.service.solicitar(dados);
    }catch (IllegalStateException ex){
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
    }catch (UnsupportedOperationException ex){
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
    }

    return ResponseEntity.ok("Adoção solicitada com sucesso!");
}

Dessa forma, quando uma exceção do tipo UnsupportedOperationException for lançada, ela será capturada e a respectiva mensagem de erro será retornada.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software