Spring Boot 2 WebClient响应将JSON转换为HashMap

时间:2018-12-16 18:51:36

标签: java spring spring-boot webclient reactive

我想从WebClient获得响应并将其转换为Map,而无需为响应创建任何Class。可能吗?所以我想在下面这样。下面的代码不是有效的代码,只是我想要的一个想法。

public Map<String, String> someFunction() {
    return webClient.post()
            .uri("/some/path")               
            .retrieve()
            .bodyToFlux(HashMap.class)
            .block();

3 个答案:

答案 0 :(得分:1)

我将首先尝试将响应对象放入String中,并确保我接受JSON类型作为回报。将响应放入字符串后,您可以尝试使用fastxml的jackson databind库,该库可以将JSON字符串转换为Hashmap。

例如

ObjectMapper mapper = new ObjectMapper();
String json = "{\"name\":\"abc\", \"age\":25}";

Map<String, Object> map = new HashMap<String, Object>();

// convert JSON string to Map
map = mapper.readValue(json, new TypeReference<Map<String, String>>(){});

System.out.println(map);

这是databind库和核心库java docs链接

jackson-databind

jackson-core

答案 1 :(得分:0)

我这样解决了:

public Map<String, String> someFunction() {
    return webClient.post()
            .uri("/some/path")               
            .retrieve()
            .bodyToFlux(TypedMap.class)
            .block();
}

private static class TypedMap extends HashMap<String, String>{}

答案 2 :(得分:0)

如果您对保存 LOC 感兴趣,您可能需要查看核心 Spring Framework 类:ParameterizedTypeReference<T>, found here

public Map<String, String> someFunction() {
    return webClient.post()
            .uri("/some/path")               
            .retrieve()
            .bodyToFlux(new ParameterizedTypeReference<Map<String,String>>(){})
            .block();
}

干杯。