métodos newBuilder(), build()

A classe HttpRequest é usada para descrever uma solicitação http, que é fácil de entender pelo nome. Este objeto não faz nada sozinho, apenas contém várias informações sobre a solicitação http. Portanto, como você provavelmente já adivinhou, o modelo Builder também é usado para criá-lo.

HttpRequest request = HttpRequest.newBuilder()
	.method1()
	.method2()
	.methodN()
    .build();

Onde entre chamadas aos métodos newBuilder() e build() você precisa chamar todos os métodos para construir um objetoHttpRequest.

Um exemplo de uma solicitação simples se parece com isso:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(“http://codegym.cc”))
    .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

Você pode encontrar todos os métodos da classe HttpRequest no link da documentação oficial .

E então vamos analisar o mais popular deles.

método uri()

Usando o método uri() , você pode definir o URI (ou URL) para o qual a solicitação http será enviada. Exemplo:

HttpRequest request = HttpRequest.newBuilder()
    .uri( URI.create(“http://codegym.cc”) )
    .build();

A propósito, você pode tornar esse código um pouco mais curto passando a URI diretamente para o método newBuilder() :

HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();

Importante! Um URI pode ser criado de duas maneiras:

  • novoURI(String)
  • URI.create(String)

A segunda maneira é preferível. A primeira forma, infelizmente, não é muito boa, porque o construtor URI é declarado como public URI(String str) lança URISyntaxException , e URISyntaxException é uma exceção verificada.

Métodos GET(), POST(), PUT(), DELETE()

Você pode definir o método de solicitação http usando os seguintes métodos:

  • PEGAR()
  • PUBLICAR()
  • COLOCAR()
  • EXCLUIR()

Veja como seria uma solicitação GET simples:

HttpRequest request = HttpRequest.newBuilder()
  .uri(new URI("https://codegym.cc"))
  .GET()
  .build();

método version()

Você também pode definir a versão do protocolo HTTP. Existem apenas 2 opções:

  • HttpClient.Version.HTTP_1_1
  • HttpClient.Version.HTTP_2

Digamos que você queira criar uma requisição usando o protocolo HTTP/2, então você precisará escrever:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .version( HttpClient.Version.HTTP_2 )
   .GET()
   .build();

Muito simples, não é? :)

método timeout()

Você também pode definir o tempo de execução da consulta. Se passar e a solicitação nunca for concluída, um HttpTimeoutException será lançado .

A hora em si é definida usando o objetoduraçãoda API Java DateTime. Exemplo:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .timeout( Duration.of(5, SECONDS) )
   .GET()
   .build();

A presença desse método mostra que as classes HttpClient e HttpRequest podem executar uma variedade de tarefas. Imagine que você está executando uma solicitação e algo aconteceu com a rede e durou 30 segundos. É muito mais útil receber imediatamente uma exceção e reagir a ela corretamente.

método header()

Você também pode adicionar qualquer número de cabeçalhos a qualquer solicitação. E é tão fácil de fazer quanto qualquer outra coisa. Existe um método especial para isso - header() . Exemplo:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .header("name1", "value1")
   .header("name2", "value2")
   .GET()
   .build();

Existe outra maneira alternativa de definir muitos cabeçalhos de uma só vez. Pode ser útil se, por exemplo, você converter uma lista de cabeçalhos em um array:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("name1", "value1", "name2", "value2")
   .GET()
   .build();

Tudo elementar é simples.