我进行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));
答案 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
。在这种情况下,它将在运行时引发反序列化异常。