【问题标题】:Spring 3 RestTemplate to WebClientSpring 3 RestTemplate 到 WebClient
【发布时间】:2020-05-29 12:33:50
【问题描述】:

我正在尝试使用 WebClient 迁移 Spring 版本 3 RestTemplate。但我在执行此迁移时遇到此编译错误。

cannot access org.springframework.core.ParameterizedTypeReference

这是我正在尝试更改的 Spring RestTemplate 代码

private ResponseEntity<Assignment[]> getAssignmentsPage(RestTemplate restTemplate, HttpEntity<Object> httpEntity, String url) {

            ResponseEntity<Assignment[]> responseEntity =
                    restTemplate.exchange(url, HttpMethod.GET, httpEntity, Assignment[].class);        

            return responseEntity;
    }

用 WebClient 替换代码

Flux<Assignment[]> quoteFlux = WebClient.create()
                .get()
                .uri(url)
                .retrieve()
                .bodyToFlux(Assignment[].class);

这里是 POM 文件配置

<properties>
    <java-version>1.8</java-version>
    <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
    <org.aspectj-version>1.6.9</org.aspectj-version>
</properties><dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework-version}</version>
        <exclusions>                
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <!-- added       -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <version>2.3.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.projectreactor</groupId>
        <artifactId>reactor-spring</artifactId>
        <version>1.0.1.RELEASE</version>
    </dependency>

【问题讨论】:

    标签: spring webclient spring-webflux resttemplate spring-reactor


    【解决方案1】:

    你的 Flux 应该是

    类型

    ParameterizedTypeReference&lt;Assignment[]&gt;(){}

    请查看:https://github.com/spring-projects/spring-framework/issues/20195

    【讨论】:

    • @Adek 修复了链接。
    • @Sashank 和@Michael。我已更改代码并为 ParameterizedTypeReference 添加了 Spring 核心 (5.2.6) 依赖项。但我收到了来自 Log4jConfigListner 的不同运行时错误 (NoClassDefFoundError)。
    • 嗨@Adek。我不知道这件事。做了一些搜索,发现 Log4jConfigListener 从 Spring 4.2.1 开始已被删除,有利于 Apache Log4j 2。您可以配置此侦听器类以查看原始问题是否已修复?
    猜你喜欢
    • 2011-11-26
    • 2019-05-14
    • 2019-04-04
    • 2018-06-07
    • 2018-01-20
    • 2020-08-26
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多