Клиент OpenFeign не применяет значение заголовка «Content-Type»: 415 в ответе - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу выполнить DELETE, используя feign:

public static <T> T createClient(Class<T> type) {
    return Feign.builder()
            .client(new OkHttpClient())
            .encoder(new GsonEncoder())
            .decoder(new CustomGsonDecoder())
            .logger(new Slf4jLogger(type))
            .logLevel(Logger.Level.FULL)
            .target(type, url);
}

Метод из интерфейса ConsumersClient:

@RequestLine("DELETE /consumers/{id}")
@Headers({"Content-Type: application/json", "Authorization: Bearer {token}"})
Response deleteConsumerById(@Param("token") String token, @Param("id") String id);

И когда я делаю:

CLIENT = createClient(ConsumersClient.class);
CLIENT.deleteConsumerById(token, id)

И я got

{"statusCode":415,"error":"{\"timestamp\":\"2020-02-27T08:09:33.634Z\",\"status\":415,\"error\":\"Unsupported Media Type\",\"message\":\"Content type '' not supported\",\"path\":\"/consumers/id\"}"}

Поскольку сообщение: «Тип содержимого» не поддерживается », я предполагаю, что Feign не применяет значение Content-Type к своим заголовкам.

ПОЖАЛУЙСТА ПРИМЕЧАНИЕ: Тот же запрос через Почтальон возвращает 200 с теми же параметрами. Таким образом, служба работает, как и ожидалось.

Logback сообщает, что заголовки включены:

11:09:32.660 [main] DEBUG ConsumersClient - [ConsumersClient#deleteConsumerById] ---> DELETE https://hereGoesMyURL/consumers/id HTTP/1.1
11:09:32.663 [main] DEBUG ConsumersClient - [ConsumersClient#deleteConsumerById] Content-Type: application/json
11:09:32.663 [main] DEBUG ConsumersClient - [ConsumersClient#deleteConsumerById] Authorization: Bearer hereGoesTheToken
11:09:32.664 [main] DEBUG ConsumersClient - [ConsumersClient#deleteConsumerById] ---> END HTTP (0-byte body)

Пожалуйста, помогите понять что не так с моим кодом.

1 Ответ

0 голосов
/ 27 февраля 2020

Проблема обсуждалась здесь: https://github.com/OpenFeign/feign/issues/391

Поскольку не существует определенной семантики для DELETE с телом, Feign удаляет заголовок типа содержимого в запросах этого типа.

...