Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Get para API externa com Bearer e response como List

Olá!

Gostaria de fazer um Get em uma API externa que retorna uma lista. Só que esse Get exige um Bearer token, que até já consegui gerar.

O que eu fiz:

    @Override
    public ResponseEntity<List<Categoria>> getCategorias(String url){

        HttpHeaders headers = new HttpHeaders();
        String accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWxsZXJJZCI6Niwic2NvcGUiOlsibWFya2V0cGxhY2UtYXBpLXNlbGxlciJdLCJmdWxsTmFtZSI6IkFQSSAtIFNlbGxlciB0ZXN0ZSIsImV4c"; 

        headers.set("Authorization", "Bearer " + accessToken);

        List<Categoria> categoriaList = new ArrayList<Categoria>();

        HttpEntity<Object> requestEntity = new HttpEntity<Object>(categoriaList,headers);

        ResponseEntity<List<Categoria>> result =  restTemplate.exchange(url, HttpMethod.POST, requestEntity,new ParameterizedTypeReference<List<Categoria>>() {});
        return result;
    } 

Está retornando um erro 405. Mas no postman da certo...

There was an unexpected error (type=Internal Server Error, status=500).
405 null
org.springframework.web.client.HttpClientErrorException$MethodNotAllowed: 405 null
    at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:87)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102)
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:778)

Já tentei várias outras coisas, mas não estou progredindo :(

3 respostas
solução!

Impressionante como eu sempre resolvo as coisas logo depois de postar no fórum haha.

Mesmo assim, gostaria de saber se esta é a melhor forma de se fazer.

O que eu fiz para funcionar:

    @Override
    public List<Categoria> getCategorias(String url){

        String accessToken = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWxsZXJJZCI6Niwic2NvcGUiOlsibWFy"; 

        MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
        headers.add("Authorization", accessToken);

        RequestEntity<Object> request = new RequestEntity<>(
                headers, HttpMethod.GET, URI.create(url));


        ResponseEntity<Categoria[]> response = restTemplate.exchange(request, Categoria[].class);


        return Arrays.asList(response.getBody());

    } 

Olá Gustavo!

Acho que ficou bom sim, só uma ideia seria tentar recuperar o Token direto da API sem precisar criar a String na mão.

A sim, com certeza. Era um teste mesmo.

Muito obrigado!