Feign客户端发送PUT请求无法到达控制器返回415状态码求助
Feign调用PUT接口返回415状态码的原因及解决办法
415状态码的核心含义是服务器无法处理请求附带的媒体格式,结合给出的代码,常见原因和对应解决方式如下:
- 原因1:Feign未正确识别请求体参数,Header配置与实际序列化格式冲突
你使用的是原生Feign注解,没有显式标注第二个DTO参数为请求体,部分版本的Feign如果同时配置了表单编码器,会默认把自定义对象参数当成表单参数序列化,即使你声明了Content-Type: application/json也会出现格式不匹配。
解决办法:如果是Spring Cloud OpenFeign环境,给第二个DTO参数添加@RequestBody注解;原生Feign环境可添加@Param("body")注解,同时确认Feign配置了Jackson JSON编码器。
修正后的Feign代码示例:@RequestLine("PUT /merchants/{merchantId}") @Headers("Content-Type: application/json") MerchantDTO updateMerchant(@Param("merchantId") Long merchantId, @RequestBody PutMerchantDTO putMerchantDTO); - 原因2:全局Feign拦截器覆盖了Content-Type头
如果项目中配置了全局Feign请求拦截器,统一给请求设置了Content-Type: application/x-www-form-urlencoded等其他类型的头,会覆盖你在方法上配置的JSON头,导致服务端收到的媒体类型不匹配。
解决办法:检查全局Feign拦截器逻辑,避免带JSON请求体的请求的Content-Type被覆盖,或者调高方法级Header的配置优先级。 - 原因3:后端缺少JSON消息转换器
如果Spring Boot项目做了自定义WebMvc配置,移除了默认的MappingJackson2HttpMessageConverter,会导致后端无法解析application/json格式的请求体,返回415。
解决办法:检查WebMvc配置类,确保注册了Jackson JSON消息转换器,可正常处理application/json类型的请求。 - 原因4:传入的PutMerchantDTO参数为null
如果调用updateMerchant方法时第二个参数传了null,Feign会认为没有请求体,自动移除你配置的Content-Type头,服务端收到无媒体类型的请求就会返回415。
解决办法:增加参数校验逻辑,确保调用接口时PutMerchantDTO不为空。
内容的提问来源于stack exchange,提问作者Hayk Mkhitaryan
相关产品推荐
相关产品推荐

