spring-cloud-starter-openfeign: недопустимый метод HTTP: PATCH выполняет PATCH - PullRequest
5 голосов
/ 06 мая 2020

Контекст

У меня есть веб-проект Spring Boot (версия 2.2.6.RELEASE).

Из этого веб-приложения (я называю «APP1») я хочу вызвать другой URI, используя метод PATCH из другого веб-приложения (назовем его «APP2»). В моем pom. xml у меня есть следующая зависимость:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

Вот как я вызываю метод PATCH другого веб-приложения.

@FeignClient(name = "clientName", url = "base-uri")
public interface MyInterface{
   @PatchMapping(value = "/target-uri")
    void callClientMethod(Map<String, Object> args);

Проблема

  • Фактически вызывается метод PATCH APP2
  • Но затем APP1 выдает следующую ошибку:
    • feign.RetryableException: недопустимый метод HTTP: PATCH выполняет PATCH

Я посмотрел на Inte rnet в поисках решения и добавил следующий фрагмент к моему помпу. xml

<dependency>
    <groupId>com.netflix.feign</groupId> <!-- Also tried io.github.openfeign -->
    <artifactId>feign-httpclient</artifactId>
    <version>8.18.0</version>
</dependency>

После что метод PATCH приложения APP2 все еще вызывается правильно, но в APP1 я получил следующую ошибку: java .lang.NoSuchMethodError: feign.Response.create (ILjava / lang / String; Ljava / util / Map; Lfeign / Response $ Body;) Lfeign / Response;

Вопрос

  • Кто-нибудь знает, как решить эту ошибку?

Заранее благодарим за помощь!

Ответы [ 2 ]

3 голосов
/ 25 августа 2020

У меня была такая же проблема, и я потратил много времени, чтобы понять и решить эту проблему.
Первое, что вам нужно понять, это то, что Feign не поддерживает HTTP-метод PATCH для вызова из коробки!
И если вы можете изменить методы в обеих службах, используйте PUT для обновления вместо PATCH ...

Но если вы интегрируетесь со сторонней реализацией, вы должны добавить некоторые конфигурации:
1. Добавить зависимость, которая поддерживает HTTP-метод PATCH :

// https://mvnrepository.com/artifact/io.github.openfeign/feign-okhttp
группа компиляции: 'io.github.openfeign', имя: 'feign-okhttp', версия: '10 .2.0 '

Добавить конфигурацию:
@Configuration 
public class FeignConfiguration {
    @Bean
    public OkHttpClient client() {
        return new OkHttpClient();
    } 
}
И пример запроса PATCH с Feign:
@FeignClient(name = "someapi", url = "${client.someapi.url}")
@Component
@RequestMapping("/users")
public interface SomeClient {

    @RequestMapping(value = "/{id}",
            method = RequestMethod.PATCH,
            consumes = MediaType.APPLICATION_JSON_VALUE,
            produces = MediaType.APPLICATION_JSON_VALUE)
    FeignUser update(@PathVariable("id") Long id, @RequestBody Map<String, Object> fields);
}

Надеюсь, это кому-то поможет.

0 голосов
/ 27 июля 2020

У меня работает следующая конфигурация:

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-jackson</artifactId>
    <version>${feign.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
    <version>${feign.version}</version>
</dependency>

Где:

feign.version - 11.0
Spring Boot - 2.3.0.RELEASE
Spring-cloud. версия - 2.2.3.RELEASE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...