22

we are using netflix feign to make call to restful web service. For patch request it looks like PATCH request is not supported.

Caused by: feign.RetryableException: Invalid HTTP method: PATCH executing PATCH https://projects.dev.xyz.com/projects/v1/users/{uid}/projects/{guid} at feign.FeignException.errorExecuting(FeignException.java:66) at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:100) at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:74) at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:54) at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:294)

4

5 回答 5

18

如果有人遇到与spring-cloud- feign 相同的问题,只需添加 maven 依赖项即可使用 feign 中的 httpClient:

    <dependency>
        <!-- Required to use PATCH -->
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-httpclient</artifactId>
        <version>${feign.version}</version>
    </dependency>
于 2017-06-22T07:51:08.203 回答
14

您可以使用 feign 的 httpClient 来解决此问题。您想首先将模块添加到类路径中,然后在使用 Feign.builder().client(new ApacheHttpClient()). 这增加了对 PATCH 请求的支持。

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

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

于 2016-06-27T16:00:55.067 回答
2

我也遇到了同样的问题,但设法通过添加 feign-httpclient 依赖项并在请求中添加额外的标头 X-HTTP-Method-Override : 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
于 2018-12-20T11:46:05.267 回答
1

如果您使用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()
    }
}

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

@FeignClient(name = "YourClient", url = "\${base-url}", configuration = [FeignOkHttpConfiguration::class])
interface YourClient {

@PatchMapping
fun update(model: YourModel): ResponseEntity<String>

}
于 2021-08-06T19:43:38.077 回答
0

我有依赖

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);
    }
于 2021-11-22T11:29:18.567 回答