Boa noite
Quando estava fazendo atividade percebi que algumas Series quando buscava esteva dando a seguinte seguinte Exceção
java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:774) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:755) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:319) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.1.jar:3.1.1] at br.com.alura.screenmatch.ScreenmatchApplication.main(ScreenmatchApplication.java:17) ~[classes/:na] Caused by: org.springframework.dao.DataIntegrityViolationException: could not execute statement [ERRO: valor é muito longo para tipo character varying(255)] [insert into series (atores,avaliacao,genero,sinopse,titulo,total_temporadas) values (?,?,?,?,?,?)]; SQL [insert into series (atores,avaliacao,genero,sinopse,titulo,total_temporadas) values (?,?,?,?,?,?)]
isso se dava ao fato que quando os dados eram inseridos em uma das colunas no PSQL ultrapassava os 255 caracteres que por padrão já era definido assim que criávamos a tabela, e problema em si era na coluna sinopse , então para quem está sofrendo com esse problema trago uma possível solução
Modificar Sinopse no construtor na Classe Series
abaixo seria o código como já esta no momento :
public Serie(DadosSerie dadosSerie){
this.titulo = dadosSerie.titulo();
this.totalTemporadas = dadosSerie.totalTemporadas();
this.avaliacao = OptionalDouble.of(Double.valueOf(dadosSerie.avaliacao())).orElse(0);
this.genero = Categoria.fromString(dadosSerie.genero().split(",")[0].trim());
this.atores = dadosSerie.atores();
**this.sinopse = ConsultaMyMemory.obterTraducao(dadosSerie.sinopse().trim());**
}
na ultima linha substitua por :
String sinopseTraduzida = ConsultaMyMemory.obterTraducao(dadosSerie.sinopse().trim());
this.sinopse = sinopseTraduzida.length() > 255 ? sinopseTraduzida.substring(0, 255) : sinopseTraduzida;
Se o comprimento de sinopseTraduzida for maior que 255, o trecho sinopseTraduzida.substring(0, 255) será executado. Isso significa que apenas os primeiros 255 caracteres serão extraídos da sinopse traduzida. e se o comprimento for menor ou igual a 255, a sinopse será atribuída diretamente sem qualquer modificação.
Pode ser uma solução provisória para conseguirmos prosseguir com as atividades.
Um exemplo de uma Serie que veio a dar esse problema foi The Big Bang Theory.