【问题标题】:How to get List from Object in Spring RestTemplate如何从 Spring RestTemplate 中的对象获取列表
【发布时间】:2018-09-19 23:38:27
【问题描述】:

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

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]

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

【问题讨论】:

  • 使用列表代替对象

标签: java json spring rest arraylist


【解决方案1】:

试试这个。这应该有效。

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();

【讨论】:

  • 如果我使用 ResponseEntity> 有一个问题 Type mismatch: cannot convert from ResponseEntity&lt;List&gt; to ResponseEntity&lt;List&lt;String&gt;&gt; 我可以把 List of String 改为 List is a raw type. References to generic type List&lt;E&gt; should be parameterized 和第二行 Type safety: The expression of type List needs unchecked conversion to conform to List&lt;String&gt;
  • 关于第一种方式,您使用原始类型。当getBody() 被调用时,您如何检索List&lt;String&gt;?我一般用第二种方式。
  • @Tom 我认为第一种方法无效。而是使用第二个。
  • @davidxxx,感谢您指出。汤姆我已经更新了我的答案。看看吧。
  • @pvpkiran 好多了。 ParameterizedTypeReference 是非常好的替代品。你当然有我的投票:)
【解决方案2】:

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

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

但是,您不能直接将其转换为List&lt;String&gt;,因此您必须通过循环或流检查元素类型以生成类型化列表。 使用的 API 可以通过什么方式返回实际类型?

【讨论】:

    【解决方案3】:

    你可以试试这个解决方法

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

    或者,您可以使用类似的库 ObjectMapper, 它直接将 json 字符串转换为您想要的模型

    【讨论】:

      【解决方案4】:

      如果使用 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);
      

      【讨论】:

        【解决方案5】:

        这对你有用:

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

        (List[] 而不是 Object[] 也是如此)

        【讨论】:

        • 很遗憾不是Type mismatch: cannot convert from ResponseEntity&lt;Object&gt; to ResponseEntity&lt;Object[]&gt;
        • @tom,你是否也添加了 Object[]?
        猜你喜欢
        • 1970-01-01
        • 2021-08-10
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 2017-02-26
        • 2018-06-19
        • 2015-09-25
        • 2019-07-03
        相关资源
        最近更新 更多