Map to Map<String, Integer> from restTemplate
我调用restTemplate 并接收rawMap。从调试中我看到键类和值类是字符串。没关系,因为响应我的 restTemplate 的服务以 JSON 格式发送地图。现在我想用这个代码创建地图:
1 2
|
Map <String, Integer > gameIdsMap = new HashMap <>();
rawGameIdsMap. forEach(((key, value ) -> gameIdsMap. put(String. valueOf(key ), Integer. parseInt(String. valueOf(value )))));
|
我很好奇。有没有更有效和更清晰的方法来做到这一点?
我不能只从 restTemplate Map <String,Integer>.
接收
rest模板
1
|
Map rawGameIdsMap = Objects. requireNonNull(restTemplate. getForObject(uriFactory. getReverseGameIdsURI(), Map. class));
|
- 我不确定,但类似的东西可能会起作用 Map<String, Integer> casted = raw.parallelStream().map(Map::put);
-
stackoverflow.com/questions/8108887/…
RestTemplate 类提供了几个exchange() 方法。
它允许将 ParameterizedTypeReference 的实例指定为参数,其目的是捕获和传递泛型类型。
所以你可以做类似的事情:
1 2 3
|
Map <String, String > gameIdsMap = Objects. requireNonNull(
template. exchange(uri, HttpMethod. GET, null, new ParameterizedTypeReference <Map <String, String >>() {
}). getBody());
|
这样做:
1 2 3
|
Map <String, Integer > gameIdsMap = Objects. requireNonNull(
template. exchange(uri, HttpMethod. GET, null, new ParameterizedTypeReference <Map <String, Integer >>() {
}). getBody());
|
也是正确的(至少对于 Jackson),但如果该值无法转换为 Integer。在这种情况下,它将在运行时引发反序列化异常。
- @Sotirios Delimanolis 你有杰克逊/格森的参考资料或一个具体的例子来证明这样的事情吗?抱歉,现在没时间写真正的测试。
-
我对 Spring 模板的 exchange() 的最后一个有疑问。我会试一试。
-
@Sotirios Delimanolis 我检查过了。它像你说的那样工作。至少与杰克逊在一起。我会删除我的答案,但不能因为它被接受。我至少更新了以符合现实。
来源:https://www.codenong.com/57558176/
微信公众号
手机浏览(小程序)
Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in
/mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line
57
Warning: get_headers(): Failed to enable crypto in
/mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line
57
Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9123.jpg): failed to open stream: operation failed in
/mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line
57