Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Dúvidas gerais após concluir o curso

Olá. Terminei as 3 partes do curso de Spring Boot e estou com algumas dúvida que juntei durante o curso.

  1. No projeto do curso, a pilha de exceção foi desabilitada por questões de segurança. Na nossa instituição, nós corrigimos bugs reportados pelo usuário usando prints da tela contendo a pilha de exceção, porque temos uma grande dificuldade em entender o erro sem ver a pilha. Queria saber qual é a melhor maneira de coletar dados para depuração de erros inesperados reportados pelo usuário.

  2. Por muito tempo fizemos aplicações num pacote .war e colocamos todos os pacotes .war num mesmo servidor Tomcat. Cada projeto é distinguido com um prefixo na URL com o nome do projeto. No curso foi gerado um arquivo .jar que é executado já criando o servidor só para o projeto. Queria saber como executar dois ou mais projetos no mesmo servidor diferenciando somente pelo prefixo na URL.

  3. O projeto tem a tabela médico com email e CRM marcados com unique e esse erro não está sendo tratado. Adicionei uma função na classe TratadorDeErros para DataIntegrityViolationException, mas na função não consigo saber qual é a constraint com erro e nem a coluna para dar uma resposta mais clara ao usuário.

  4. O projeto está cheio de alertas do Java dizendo: ResponseEntity is a raw type. References to generic type ResponseEntity should be parameterized Existe alguma configuração para ocultar esses alertas?

  5. Percebi que tem muita conversão de DTO para entidade e vice-versa, que é algo braçal e mais complexo para dar manutenção quando uma coluna é adicionada ou removida. Pensei em usar Java Reflection, mas ouvi dizer que prejudica a performance. Compensa usar Java Reflection para fazer essa conversão?

1 resposta
solução!

Olá Teo! Tudo bem com você?

Parabéns por concluir o curso de Spring Boot! Vamos às suas dúvidas:

1 - Para coletar dados para depuração de erros inesperados reportados pelo usuário, você pode utilizar ferramentas como o log4j ou o logback para registrar as informações relevantes em um arquivo de log. Dessa forma, você poderá consultar o log para entender melhor os erros reportados pelos usuários. Além disso, é importante capturar informações adicionais, como o stack trace da exceção, para ajudar na identificação e resolução dos problemas.

2 - Para executar dois ou mais projetos no mesmo servidor, diferenciando-os apenas pelo prefixo na URL, você pode configurar um servidor de aplicação, como o Tomcat, para hospedar os projetos como diferentes contextos. Cada projeto seria implantado como um contexto separado no servidor, e você poderia acessá-los através de URLs diferentes, com base no contexto definido para cada projeto.

3 - Para obter informações mais claras sobre os erros de violação de integridade de dados na tabela "médico", você pode utilizar a classe DataIntegrityViolationException para capturar a exceção e, em seguida, extrair informações adicionais do objeto de exceção. Por exemplo, você pode usar o método getCause() para obter a causa raiz da exceção e, em seguida, analisar as informações disponíveis para identificar a constraint com erro e a coluna afetada.

4 - Os alertas do Java que você mencionou estão relacionados ao uso de tipos genéricos não parametrizados. Para corrigir esses alertas, você pode adicionar a declaração de tipo adequada ao utilizar a classe ResponseEntity. Por exemplo, se você estiver retornando um objeto do tipo String, você pode usar ResponseEntity<String>. Dessa forma, os alertas serão eliminados.

5 - A conversão de DTO para entidade e vice-versa pode ser um processo trabalhoso e propenso a erros quando há muitas colunas envolvidas. O uso de Java Reflection pode ser uma opção para automatizar esse processo, mas é importante considerar o impacto no desempenho. Em geral, o uso de Reflection pode ser mais lento do que abordagens mais diretas. Portanto, é importante avaliar se o ganho de produtividade justifica a possível perda de desempenho. Outra alternativa é utilizar bibliotecas de mapeamento objeto-relacional, como o MapStruct ou o ModelMapper, que podem simplificar o processo de conversão sem o uso de Reflection.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.