Java 从restTemplate映射到映射
我不调用restTemplate并接收rawMap。从调试中,我看到键类和值类是字符串。这没问题,因为响应我的restTemplate的服务以JSON格式发送映射。现在我想用以下代码将地图装箱:Java 从restTemplate映射到映射,java,spring,spring-mvc,Java,Spring,Spring Mvc,我不调用restTemplate并接收rawMap。从调试中,我看到键类和值类是字符串。这没问题,因为响应我的restTemplate的服务以JSON格式发送映射。现在我想用以下代码将地图装箱: Map<String, Integer> gameIdsMap = new HashMap<>(); rawGameIdsMap.forEach(((key, value) -> gameIdsMap.put(String.valueOf(key), Integer.par
Map<String, Integer> gameIdsMap = new HashMap<>();
rawGameIdsMap.forEach(((key, value) -> gameIdsMap.put(String.valueOf(key), Integer.parseInt(String.valueOf(value)))));
RestTemplate类提供了几种交换方法。
它允许将ParameteredTypeReference的实例指定为参数,其目的是捕获并传递泛型类型。
所以你可以这样做:
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());
至少在Jackson中也是正确的,但如果该值无法转换为整数。在这种情况下,它将在运行时引发反序列化异常 我敢肯定,但像这样的事情可能会起作用:Map casted=raw.parallelStream.mapMap::put@Sotirios Delimanolis你有没有杰克逊/格森的参考资料或具体例子来说明这一点?对不起,现在没有时间写一个真正的测试。我对最后一个使用Spring模板交换的测试有疑问。“我会试一试的。”索蒂里奥斯·德里马诺利斯我查过了。就像你说的那样。至少对杰克逊来说是这样。我想删除我的答案,但无法删除,因为它已被接受。我更新了至少是为了符合现实。
Map<String, Integer> gameIdsMap= Objects.requireNonNull(
template.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference<Map<String, Integer>>() {
}).getBody());