无效的 HTTP 方法:补丁>执行补丁:由:假装导致。可重试异常:



我们正在使用 Netflix 假装调用 Restful Web 服务。对于补丁请求,似乎不支持补丁请求。

原因:假装。可重试异常:无效的 HTTP 方法:修补程序 正在执行补丁 https://projects.dev.xyz.com/projects/v1/users/{uid}/projects/{guid} 在佯装。FeignException.errorExecuting(FeignException.java:66) at 装。SyncMethodHandler.executeAndDecode(SynchronousMethodHandler.java:100) 在 装。SyncMethodHandler.invoke(SyncMethodHandler.java:74) 在 feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:54) 在 com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:294)

如果有人在 spring-cloud-fake 上遇到同样的问题,只需添加 maven 依赖项即可使用 httpClient from feign

    <dependency>
        <!-- Required to use PATCH -->
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-httpclient</artifactId>
        <version>${feign.version}</version>
    </dependency>

你可以通过使用 httpClient from fake 来解决这个问题。您希望首先将模块添加到类路径中,然后在构建对象时使用 Feign.builder().client(new ApacheHttpClient()) .这增加了对补丁请求的支持。

链接到文档:https://github.com/Netflix/feign/tree/master/httpclient

编辑:还有一个假装对象包装了apache的http客户端,链接在这里

我也遇到了同样的问题,但设法通过添加假装-httpclient依赖项并在请求中添加额外的标头X-HTTP-Method-Overpre:PATCH来解决它。

<dependency>
    <!-- Required to use PATCH -->
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
    <version>${feign.version}</version>
</dependency>

添加页眉

@RequestHeader(value="X-HTTP-Method-Override", defaultValue="PATCH") String xHttpMethodOveride

如果您使用implementation("org.springframework.cloud:spring-cloud-starter-openfeign")并且遇到补丁请求问题,那么您可以执行以下操作(Kotlin):

添加此依赖项

 implementation("io.github.openfeign:feign-okhttp:10.2.0")

创建以下配置类

class FeignOkHttpConfiguration {
    @Bean
    fun client(): OkHttpClient {
        return OkHttpClient()
    }
}

并将此配置添加到您的客户端(如果您希望这是每个假客户端的通用配置,那么您也可以为 class FeignOkHttpConfiguration 添加@Configuration)。

@FeignClient(name = "YourClient", url = "${base-url}", configuration = [FeignOkHttpConfiguration::class])
interface YourClient {
@PatchMapping
fun update(model: YourModel): ResponseEntity<String>
}

我依赖于

implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign'

和 PATCH 造成了麻烦,我还配置了自定义客户端,以便在映射到响应类型之前处理原始响应。解决方案是使用适当的http客户端添加依赖项,例如

implementation group: 'io.github.openfeign', name: 'feign-httpclient', version: '11.7'

然后我用ApacheHttpClient配置了我的客户端,如下所示:

    @Bean
    Client customClient(SessionStorage sessionStorage) {
        return new CustomClient(new ApacheHttpClient(), sessionStorage);
    }

最新更新