从restTemplate映射到Map <String,Integer>

时间:2019-08-19 13:52:26

标签: java spring spring-mvc

我进行restTemplate调用并接收rawMap。从调试中,我看到键类和值类是String。可以,因为对我rest模板的响应的服务以JSON发送地图。现在,我要使用以下代码创建Map:

Map<String, Integer> gameIdsMap = new HashMap<>();
rawGameIdsMap.forEach(((key, value) -> gameIdsMap.put(String.valueOf(key), Integer.parseInt(String.valueOf(value)))));

我很好奇。有更有效,更清晰的方法吗? 我不能只从restTemplate Map <String,Integer>接收。

RestTemplate

Map rawGameIdsMap = Objects.requireNonNull(restTemplate.getForObject(uriFactory.getReverseGameIdsURI(), Map.class));

1 个答案:

答案 0 :(得分:0)

RestTemplate类提供了几种exchange()方法。
它允许将ParameterizedTypeReference的实例指定为参数,目的是捕获并传递通用类型。 因此,您可以执行以下操作:

Map<String, String> gameIdsMap = Objects.requireNonNull(
    template.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference<Map<String, String>>() {
    }).getBody());

这样做:

Map<String, Integer> gameIdsMap= Objects.requireNonNull(
    template.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference<Map<String, Integer>>() {
    }).getBody());

也是正确的(至少对于杰克逊而言),但是如果该值不能转换为Integer。在这种情况下,它将在运行时引发反序列化异常。