无效的HTTP方法:PATCH>执行PATCH:引起:feign.RetryableException:

时间:2016-02-12 23:35:11

标签: netflix-feign

我们正在使用netflix feign来调用restful web服务。对于补丁请求,它看起来不支持PATCH请求。

  

引起:feign.RetryableException:无效的HTTP方法:PATCH   执行PATCH   https://projects.dev.xyz.com/projects/v1/users/ {UID} /项目/ {GUID}         at feign.FeignException.errorExecuting(FeignException.java:66)at   feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:100)         在   feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:74)         在   feign.hystrix.HystrixInvocationHandler $ 1.run(HystrixInvocationHandler.java:54)         在   com.netflix.hystrix.HystrixCommand $ 1.call(HystrixCommand.java:294)

4 个答案:

答案 0 :(得分:9)

如果某人遇到与 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>

答案 1 :(得分:8)

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

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

编辑:还有一个假装对象包装了apache的http客户端,link here

答案 2 :(得分:1)

我也遇到了同样的问题,但是设法通过添加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

答案 3 :(得分:0)

如果您使用 y_type, y_true, y_pred, multioutput = _check_reg_targets( y_true, y_pred, multioutput) check_consistent_length(y_true, y_pred, sample_weight) output_errors = np.average((y_true - y_pred) ** 2, axis=0, weights=sample_weight) if not squared: output_errors = np.sqrt(output_errors) if isinstance(multioutput, str): if multioutput == 'raw_values': return output_errors elif multioutput == 'uniform_average': # pass None as weights to np.average: uniform mean multioutput = None return np.average(output_errors, weights=multioutput) 并且遇到补丁请求问题,那么您可以在下面执行(kotlin):

添加这个依赖

output_errors = np.average((y_true - y_pred) ** 2, axis=0,
                               weights=sample_weight)

创建下面的配置类

implementation("org.springframework.cloud:spring-cloud-starter-openfeign")

并将此配置添加到您的客户端(如果您希望这是每个 feign 客户端的通用配置,那么您还可以为 implementation("io.github.openfeign:feign-okhttp:10.2.0") 添加 @Configuration)。

class FeignOkHttpConfiguration {

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