7
respostas

[Dúvida] Consumir API externa Ibge

Oi professor estou tentando consumir uma api externa e está apresentando esse aqui:

WARN 16124 --- [ctor-http-nio-2] r.netty.http.client.HttpClientConnect : [63710093, L:/10.1.13.124:64718 - R:servicodados.ibge.gov.br/170.84.40.25:443] The connection observed an error

java.net.SocketException: Connection reset

Consegue me ajudar?

Obrigado

7 respostas

Oi!

Manda aqui como ficou o seu código que consome essa API

Classe Service:

@Service public class IbgeService {

public Distritos[] retornarDistritos2(String codIbge) {
    String url = "https://servicodados.ibge.gov.br";
    String uri = "/api/v1/localidades/microrregioes/{codigoIbge}/distritos";

    Distritos[] distritos = WebClient
            .create(url)
            .get()
            .uri(uri, codIbge)
            .retrieve()
            .bodyToMono(Distritos[].class).block();

    return distritos;

}

}

Controller:

@GetMapping("/municipios/{numero}") public ResponseEntity consultaDistrito(@PathVariable String numero) {

    Distritos[] distritos = ibgeService.retornarDistritos2(numero);

    return ResponseEntity.ok(distritos);
}

Aqui estão os DTOs

@Data public class UF {

private Long id;
private String sigla;
private String nome;
private Regiao regiao;

@Data public class RegiaoIntermediaria {

private Long id;
private String nome;
private UF uf;

}

@Data public class RegiaoImediata {

private Long id;
private String nome;

@JsonAlias("regiao-intermediaria")
private RegiaoIntermediaria regiaoIntermediaria;

}

@Data public class Regiao {

private Long id;
private String sigla;
private String nome;

}

@Data public class Municipio {

private Long id;
private String nome;

@JsonAlias("microrregiao")
private MicroRegiao microRegiao;

@JsonAlias("regiao-imediata")
private RegiaoImediata regiaoImediata;

}

@Data public class MicroRegiao {

private Long id;
private String nome;

@JsonAlias("mesorregiao")
private MesoRegiao mesoregiao;

}

@Data public class MesoRegiao {

private Long id;
private String nome;
private UF uf;

}

@Data public class DistritosList {

private List<Distritos> distritoList;

public DistritosList() {
    distritoList = new ArrayList<>();
}

}

@Data public class Distritos {

private Long id;
private String nome;

@JsonAlias("municipio")
private Municipio municipio;

}

Fiz um teste aqui e funcionou:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Que estranho, aqui continua dando o mesmo erro, tava tentando umas opções aqui mas não funciona da sempre esse mesmo erro.

Pela mensagem de erro indica que a coenxão foi interrompida. Chutaria ser alguma problema na sua rede, como bloqueio, proxy, firewall, etc.

Oi professor, será que tem algo a ver com a classe de segurança abaixo?

@Configuration @EnableWebSecurity public class SecurityConfigurations {

@Autowired
private SecurityFilter securityFilter;

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http.csrf(csrf -> csrf.disable())
            .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .authorizeHttpRequests(req -> {
                req.requestMatchers(HttpMethod.POST, "/jurisdicao/login").permitAll();
                req.anyRequest().authenticated();
            })
            .addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
            .build();
}

@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
    return configuration.getAuthenticationManager();
}

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}