问题:通过FeignClient调用第三方接口时,出现如下报错
incomplete output stream executing xxx 或者 too many bytes written executing POST
解决办法:自定义feign配置,忽略content-length字段。
解释:跳过 content-length,避免追加参数导致content-length值与实际长度不一样
@Configuration
public class FeignConfiguration implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
if (attributes == null) {
return;
}
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
//跳过 content-length,避免追加参数导致content-length值与实际长度不一样
if (name.equals("content-length")) {
continue;
}
requestTemplate.header(name, values);
}
}
requestTemplate.header("Mlink-URL", "mlinkClient");
}
}