OpenFeign 客户端不应用"Content-Type"标头值:415 作为响应



我想使用foreign:执行DELETE

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)

我得到

{"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不会将内容类型值应用于其标头。

请注意:通过Postman的相同请求返回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)

请帮我找出我的代码出了什么问题。

这里已经讨论过这个问题:https://github.com/OpenFeign/feign/issues/391

由于没有定义带正文的DELETE的语义,Feign正在剥离这种类型请求的内容类型标头。

最新更新