0% acharam este documento útil (0 voto)
5 visualizações

Java

coisas de java

Enviado por

Pedro Rosas
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
5 visualizações

Java

coisas de java

Enviado por

Pedro Rosas
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 7

porra de java ->

Java importantes..

A gente ja inicia o projeto com algumas coisas dentro dele...

@SpringBootApplication
public class ScreenmatchApplication implements CommandLineRunner {

public static void main(String[] args) {


SpringApplication.run(ScreenmatchApplication.class, args);
}

@Override
public void run(String... args) throws Exception {

System.out.println("Primeiro projeto Spring sem web");


}
}

Issoo por exemplo!

Porem a implementação/contrato de CommandLineRunner nos que estamos colocando


porque no momento nos nao iremos construir nenhuma aplicação web, iremos trabalhar
somente com linha de comando!

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 é um adminstrador de dependencias!

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!

Ele tem um padrao de configuração de dependencias, entao nao precisamos nos


preocupar com quase nada no inicio do nosso projeto;

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

--> Implementando a camunicação com a API - Wweb servicer

Ela simplesmente vai ver o JAVA DOC... eles vao ver como se faz u http request

HttpRequest request = HttpRequest.newBuilder()

Ele serve para ser um padrao newBuilder... ele serve para que a gente cria um
objeto de maneira generica sem problema.

HttpResponse<String> response = client.


send(request, HttpResponse.BodyHandlers.ofString());

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

throws IOException, InterruptedException

CASO ocorra um erro, o nosso throws ira tratar do Error

-->

Ficando dinamico

Scanner leitura = new Scanner(System.in);


System.out.println("Digite o filme para busca: ");
var busca = leitura.nextLine();

String endereco = "https://www.omdbapi.com/?t=" + busca +


"&apikey=dd71f4dd";

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()


.uri(URI.create(endereco))
.build();

HttpResponse<String> response = client.


send(request, HttpResponse.BodyHandlers.ofString());

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...

--> Transformando os dados

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...

Como eu pensei ne, tem nomes diferentes

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?")

POREM nos temos outras formas,porque e se a API mudar?

Ocorreu um erro na tentativa de obter as credenciais de usuário. Por favor, tente


novamente mais tarde.

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

Iremos criar um record

public record TituloOmdb(String title, String year, String runtime) {

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

Gson gson = new Gson();

TituloOmdb meuTituloOmdb = gson.fromJson(response.body(),


TituloOmdb.class);

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

Gson gson = new


GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();

Esse comando esta na documentação;


Porem so esta dando certo nesse record ne... como a gente joga para o nosso titulo?
Esse record é apenas um objeto que tradução da API....

Podemos fazer um construtor da nossa classe titulo, que receba um titulOMDB da API

public Titulo(TituloOmdb meuTituloOMDB){

this.nome = meuTituloOMDB.title();
this.anoDeLancamento = Integer.valueOf(meuTituloOMDB.year());
this.duracaoEmMinutos =
Integer.valueOf(meuTituloOMDB.runtime().substring(0,2));
}

-- Entendendo os erros que o Java da:

Vemos que o year ele pode vir com "2019 -" alguma coisa, por isso esta dando esse
erro ai entendeu.

No java é a mesma coisa do sql.... try catch

try {

Titulo meuTitulo = new Titulo(meuTituloOmdb);


System.out.println(meuTitulo);
} catch (NumberFormatException e) {

System.out.println("Aconteceu um erro hein mano;");


System.out.println(e.getMessage());
}

Mas como nos podemos tratar diversas execessoes?

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

a gente pode colocar simplesmente a classe mae das execessoes

catch (Exception e){

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

Nos podemos criar uma excessao na propria classe

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 "
}

if (meuTituloOMDB.year().length() > 4){

throw new ErroDeConversaoDeAnoException("Não consegui converter o ano,


pois possui mais de 4 caracteres.");
}

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:

public class ErroDeConversaoDeAnoException extends Throwable {


public ErroDeConversaoDeAnoException(String s) {
}
}

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;

Olha como ficou no final:

public class ErroDeConversaoDeAnoException extends RuntimeException {

private String mensagem;


public ErroDeConversaoDeAnoException(String mensagem) {

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) {

System.out.println("Aconteceu um erro hein mano;");


System.out.println(e.getMessage());
}

--> Gravando dados em um arquivo:

FileWriter

FileWriter escritaArquivo = new FileWriter("filmes.txt");

escritaArquivo.write(meuTitulo.toString());
escritaArquivo.close();

Mas eu nao salvei ele em nenhum lugar

Mas e se a gente colocar isso em um json que a gente cria? Seria maneiro ne.

A gente pode ler arquivo com scanner olha que maneiro

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class LeituraDeArquivo {


public static void main(String[] args) {
try {
File arquivo = new File("arquivo.json");
Scanner scanner = new Scanner(arquivo);

while (scanner.hasNextLine()) {
String linha = scanner.nextLine();
System.out.println(linha);
}

scanner.close();
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado!");
}
}
}

--> Escrevendo uma lista de filme em JSON;


Aqui nos iremos fazer tudo na main, porem o certo é a gente criar uma classe para
isso ne kkkk

Criamos uma lista com interface de Titudlo

List<Titulo> listTitulos = new ArraList<>();

E vamos passar essa lista para Json

escrita.write(gson.toJson(listaTitulos));

Lembra que nos precisamos primeira instanciar esse gson.

[{"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}]

Ele coloca ja todos os atributos maneirinho!

[
{
"Nome": "Matrix",
"AnoDeLancamento": 1993,
"IncluidoNoPlano": false,
"SomaDasAvaliacoes": 0.0,
"TotalDeAvaliacoes": 0,
"DuracaoEmMinutos": 60
}
]

Ele coloca assim se quando a gente cria o Gson gson.setPrettyPrinting;

--> Spring boot começando essa merda

Criamos uma classe de serviço especifica

Você também pode gostar