如何从Spring RestTemplate中的Object获取List

时间:2018-04-10 11:11:02

标签: java json spring rest arraylist

如何从对象获取List?您可以在下面找到我的代码:

ResponseEntity<Object> responseEntity = restTemplate.getForEntity("localhost:8083/connectors/", Object.class);
Object object = responseEntity.getBody();

实际上,对象变量是一个对象列表(字符串),我需要获取所有这些字符串。

如果我将其打印出System.out.println(object.toString());,它看起来就是这样:

[objvar, values, test, object, servar, larms, aggregates, sink, records]

我需要将这些字符串列表动态使用它。你能帮忙吗?

5 个答案:

答案 0 :(得分:11)

试一试。这应该工作。

ResponseEntity<String[]> responseEntity = restTemplate.getForEntity("localhost:8083/connectors/", String[].class);
List<String> object = Arrays.asList(responseEntity.getBody());

对于简单的情况,上面的代码可以工作,但是当你想要映射复杂的json结构时,最好使用ParameterizedTypeReference。

ResponseEntity<List<String>> responseEntity =
        restTemplate.exchange("localhost:8083/connectors/",
            HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() {
            });
List<String> listOfString = responseEntity.getBody();

答案 1 :(得分:0)

如果您确定此对象始终为List,则只需将其转换为

List<?> lst= (List) responseEntity.getBody();

但是,您无法直接将其强制转换为List<String>,因此您必须通过循环或流检查元素类型以生成类型列表。 使用过的API能否以任何方式返回实际类型?

答案 2 :(得分:0)

您可以尝试将其作为解决方法

List list = java.util.Arrays.asList(object.toString());

或者您也可以使用像这样的库 ObjectMapper, 这会直接将json字符串转换为您想要的模型

答案 3 :(得分:0)

如果要使用jwt进行授权,请遵循以下代码,然后要检索列表:

RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        
        // set `content-type` header
        headers.setContentType(MediaType.APPLICATION_JSON);

        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        
        // request body parameters
        Map<String, String> map = new HashMap<>();
        map.put("email", "abc@email.com");
        map.put("password", "pass123");
        

        // build the request
        HttpEntity<Map<String, String>> entity = new HttpEntity<>(map, headers);

        // send POST request
        ResponseEntity<String> response = restTemplate.postForEntity("http://localhost:8080/user/login", entity, String.class);


        HttpHeaders myHeader = new HttpHeaders();
        

        myHeader.add("User-Agent", "Spring's RestTemplate" );
        myHeader.set("Authorization","Bearer "+response.getBody());
        HttpEntity<String> request = new HttpEntity<>(myHeader);
        
    
        ResponseEntity<Product[]> responseEntity = restTemplate.exchange("http://localhost:8080/secure/products", HttpMethod.GET, request, Product[].class);
        List<Product> object = Arrays.asList(responseEntity.getBody());
        
        System.out.println(object);

答案 4 :(得分:-1)

这对你有用:

ResponseEntity<Object[]> responseEntity = restTemplate.getForEntity("localhost:8083/connectors/", Object[].class);
List<Object> responseList = Arrays.asList(responseEntity.getBody());

(对于List []而不是Object [])