spring-boot - 如何使用 Spring WebClient get 从端点接收 Map<String, Integer>?

标签 spring-boot spring-webflux spring-webclient

如何在 Spring Boot 中使用 WebClient 从端点 Web 服务接收 Map?这是我的尝试:(它给出语法错误: Incompatible equality constraint: Map<String, Integer> and Map )。我该如何修复它?

public Flux<Map<String, Integer>> findAll(String param1, String param2) {
    return webClient.get()
            .uri(uriBuilder -> uriBuilder
                    .path("/url")
                    .queryParam("param1", param1)
                    .queryParam("param2", param2)
                    .build())
            .accept(MediaType.APPLICATION_JSON)
            .retrieve()
            .bodyToFlux(Map.class);
}

最佳答案

对于泛型类型(例如 Map),您应该使用 ParameterizedTypeReference而不是调用 bodyToFlux 方法中的类:

public Flux<Map<String, Integer>> findAll(String param1, String param2) {
    return webClient.get()
        .uri(uriBuilder -> uriBuilder
            .path("/url")
            .queryParam("param1", param1)
            .queryParam("param2", param2)
            .build())
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToFlux(new ParameterizedTypeReference<>() {});
}

实际上,您可能想为类型引用定义一个常量:

private static final ParameterizedTypeReference<Map<String, Integer>> MAP_TYPE_REF = new ParameterizedTypeReference<>() {};

public Flux<Map<String, Integer>> findAll(String param1, String param2) {
    return webClient.get()
        .uri(uriBuilder -> uriBuilder
            .path("/url")
            .queryParam("param1", param1)
            .queryParam("param2", param2)
            .build())
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToFlux(MAP_TYPE_REF);
}

关于spring-boot - 如何使用 Spring WebClient get 从端点接收 Map<String, Integer>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63522431/

相关文章:

java - 如何使用 Spring WebClient 进行同步调用?

json - 是否有用于 Camunda Rest 响应的 Java 类?

java - 如何使用 Spring Boot/javax.net.ssl.SSLHandshakeException : Received fatal alert: handshake_failure 使用自定义证书进行 HTTP GET

java - 无法找到 Spring Boot javabean

spring-boot - 如何禁用 TomcatServletWebServerFactory 的 SpringBoot 自动配置以便自定义 spring-starter 提供它?

tomcat - 为什么 tomcat 使用 Spring WebFlux 会达到 200+ 线程?

spring-security - 更改 Spring Security WebFilter 的顺序

java - Autowiring 变量的方法为 null

java - 提交html表单数据到webflux HandlerFunction

java - 如何在 Spring Boot API 测试中模拟 Spring 5 WebClient