Java
Java
Java importantes..
@SpringBootApplication
public class ScreenmatchApplication implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
Lembrando que toda implementação que nos colocamos em nossa classe, nos temos que
colcoar @Override e escrever os metodos que sao obrigatório!
Nos coloamso no spring.project.io que nos queremos usar o MAVEN, mas o que é MAVEN?
Ele vem com um arquivo chamdo pom.xml -> nesse arquivo xml vem as depencias, e ele
baixa todas as dependencias que la tem de dentro do repositorio!
Dentro do MAVEN ele tem um ciclo de vida do software robusto, entao podemos testar
facilmente as fases da nossa aplicação com os comando mvn, mvn compile, mvn test e
mvn package
Ela simplesmente vai ver o JAVA DOC... eles vao ver como se faz u http request
Ele serve para ser um padrao newBuilder... ele serve para que a gente cria um
objeto de maneira generica sem problema.
A gente faz uma requisição para o servidor que nos devolve uma
resposta.... essa ai
Podemos perceber que ele reclama que o .send necessita de uma maneira de tratar a
excessao.... entao nos temos que colocar porque ele nos
-->
Ficando dinamico
System.out.println(response.body());
Agora o nosso desafio é pegar esse response.body() que nada mais que o Json, é
transformar o que ele nos retorna emm um titulo...
Gson -> Conversao de json para obejtos JAVA! Isso é uma biblioteca. Claro que a
nossa empresa
É tao importante em projetos grandes nos termos Maven, ou ate outro administrador
de dependencias porque, como agora, nos iremos ter que instaar uma biblioteca para
fazer a conversar de json para objeto java, e para isso nos iremos ter que baixar
da internet uma dependncia java!
Se tivessemos usando maven, kotlin ou ate outro, seria bem mais facil isso
porque agora nos temos que literalmente baixar o .jar e colocr ele como
dependencia de nosso projeto
Seria que nem o pip do python...
A gente tem que ir la na nossa classe e colocar em cima de cada atributo qual
seria a seraalização dele na API que estamos usando.
@SerializedName("como esta vindo no Json?")
Para ser algo mais profissional e fácil de ser usado, podemos criar uma "Classe"
que faz essa conversao, mas ou menos isso.
Iremos receber o body() nessa classe, porem depois iremos botar para a nossa
classe titulo!
Nao iremos criar uma class, iremos criar uma estrutura de tradução, serve
exclusivamente para traduzir
SO Issoo
Por debaixo dos panos ela ja tem tudo construido
Agora quando nos pedirmos para o gson colocar para a gente de Json para nossa
classe, nos colocamos essa classe tradutora que nos criamos
Record
System.out.println(meuTituloOmdb);
Porem se a gente ainda rodar dessa forma iremos perceber que vendo o toString tudo
nulo ne.
Se a gente mudar o record para Title, Year etc, deixar maisculo que nem vem no json
da api ira dar certo, mas ai nao pode porque nos iremos sair do padrao que utilizam
ne
Podemos fazer um construtor da nossa classe titulo, que receba um titulOMDB da API
this.nome = meuTituloOMDB.title();
this.anoDeLancamento = Integer.valueOf(meuTituloOMDB.year());
this.duracaoEmMinutos =
Integer.valueOf(meuTituloOMDB.runtime().substring(0,2));
}
Vemos que o year ele pode vir com "2019 -" alguma coisa, por isso esta dando esse
erro ai entendeu.
try {
Se a gente colocar top gun na api por exemplo da um erro porque nao pode ter espaço
entre na string que a gente coloca
Mas funciona se a gente coloca "_" no lugar do " ";
A nossa execssao nao pega porque nos colocamos apenas um tipo de execessao
Com os testes etc a gente acaba descobrindo os possiveis erros que pode dar.
Error X Exception:
Um erro é algo que acontece que o dev nao consegue tratar ne... ja uma exception é
algo previsto, muito normal ne ter esse tipo de coisas e o dev ele consegue
consertar
Uma coisa que nos pdoemos fazer tambem é nao se atentar apenas as milhares de
exceptions que existem no java, mas tambem nos podemos criar a nossa exception
-- Criando a noossa propria execessão
Podemos criar no propria construtor. A gente pode mandar ele ver se o ano tiiver
mais de 3 ou menos de 3 caracteres
/
if (meuTituloOMDB.year().lenght() > 4) {
throw new "minha execssao porquue eu quero ne para ter mais trabalho "
}
A gente pode perceber que o Java ele acusa que a gente nao tem essa classe que a
gente da instanciando ne essa classe de exception, entao
se a gente passar o mouse em cima ele nos da opção de criar uma classe que fica
assim:
percebe que ele logo de cara ele fala que a nossa classe esta extendendo o
Throwable, porem nao é um bom negocio nao
Essa classe que a a nossa classe esta sendo extendida OBRIGA que a gente cria um
try catch para ele.
Podemos simplesmente colocar uma excessao que o java simplesmente aceita que a
gente nao cheque
RuntimeException;
this.mensagem = mensagem;
}
@Override
public String getMessage() {
return this.mensagem;
}
}
Agora no nosso programa principal temos quue lancçar a nossa exception no catch
apenas um
} catch (ErroDeConversaoDeAnoException e) {
FileWriter
escritaArquivo.write(meuTitulo.toString());
escritaArquivo.close();
Mas e se a gente colocar isso em um json que a gente cria? Seria maneiro ne.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
while (scanner.hasNextLine()) {
String linha = scanner.nextLine();
System.out.println(linha);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado!");
}
}
}
escrita.write(gson.toJson(listaTitulos));
[{"Nome":"Dogville","AnoDeLancamento":2003,"IncluidoNoPlano":false,"SomaDasAvaliaco
es":0.0,"TotalDeAvaliacoes":0,"DuracaoEmMinutos":17},
{"Nome":"Matrix","AnoDeLancamento":1993,"IncluidoNoPlano":false,"SomaDasAvaliacoes"
:0.0,"TotalDeAvaliacoes":0,"DuracaoEmMinutos":60}]
[
{
"Nome": "Matrix",
"AnoDeLancamento": 1993,
"IncluidoNoPlano": false,
"SomaDasAvaliacoes": 0.0,
"TotalDeAvaliacoes": 0,
"DuracaoEmMinutos": 60
}
]