最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決openfeign調用時content-type的問題

 更新時間:2026年01月13日 09:31:09   作者:哈哈哈哈哈基米  
文章主要描述了在使用OpenFeign調用其他服務時遇到的偶發(fā)性報錯問題,問題原因在于請求頭中Content-Type的不一致,通過修改OpenFeign的配置類或調整服務引用的配置類數(shù)量,解決了這個問題,同時,還討論了當B服務接口也是文件上傳接口時的解決方案

問題1描述

今天在A服務使用openfeign調用B服務的時候,發(fā)現(xiàn)經(jīng)常會偶發(fā)性報錯。

錯誤如下:

情況為偶發(fā),很讓人頭疼。

兩個接口如下: 

A服務接口:

delayReasonApi.test(student);就是使用openfeign調用B服務的接口。 

B服務接口:

原因分析

因為A服務的接口是一個文件上傳的接口,所以前端請求頭中使用的是multipart/form-data 來請求的該接口。而B服務的接口是一個用json接口參數(shù)的接口,所以需要請求頭中的Content-Type為application/json。

如果在上面都沒有配置過的情況下,在B服務的接口參數(shù)使用@RequestBody注解來接受的時候,openfeign是會默認使用application/json 的content-type來進行請求的。

代碼如下:

但是一般我們都會在項目中加上openfeign的配置文件,將目前的所有的header中的參數(shù)全部寫入openfeign的請求中,如下:

@Component
public class FeignConfiguration implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        if (attributes != null) {
            HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
            Enumeration<String> headerNames = request.getHeaderNames();
            if (headerNames != null) {
                while (headerNames.hasMoreElements()) {
                    String name = headerNames.nextElement();
                    String values = request.getHeader(name);
                    template.header(name, values);
                }
            }
        }
    }
}

這樣就導致,我A服務接口使用的是multipart/form-data,而B服務接口需要的是application/json,而我的配置類會把A接口的multipart/form-data寫到請求頭中,這樣就會導致openfeign在請求的時候會有兩個content-Type,而且這兩個值的順序是不一定的,有的時候application/json在前面,有的時候multipart/form-data在前面:

我估計B服務在拿的時候只那集合中的第一個,但是我沒找源碼嘿嘿。當multipart/form-data在前面的時候,就會報上面的錯誤。

所以這個時候就有一個解決辦法

把我們的配置類中的代碼進行修改,跳過content-type的賦值。

如此,openfeign就只會用默認的application/json進行請求了。

問題2描述

延續(xù)上面的問題,當我修改了配置類之后,發(fā)現(xiàn)還是會有這樣的情況,后來發(fā)現(xiàn)是我們的微服務的項目中有兩個服務都寫了openfeign的配置類,而這兩個配置類都被引用在了A服務中。

openfeign在調用接口的時候會先迭代所有的配置類,導致前面的情況又重演了一遍。

解決方法

刪掉一個配置類。

問題3

繼續(xù)上面的情況,如果B服務的接口也是個文件上傳接口,那么這個時候也是需要使用multipart/form-data的,那這個時候需要怎么做呢?openfeign是否會默認使用multipart/form-data呢? 

B接口如下:

測試結果

content-type為空,并且會報錯

解決辦法

在B接口上加上 consumes = “multipart/form-data”

此時content-type就有值了。

end!!!

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關文章

最新評論

五寨县| 兴仁县| 南岸区| 侯马市| 白玉县| 鄂伦春自治旗| 通化县| 乌兰察布市| 淮阳县| 易门县| 进贤县| 南木林县| 喀喇沁旗| 邹平县| 阳江市| 贺兰县| 伊金霍洛旗| 江孜县| 石景山区| 柳州市| 固镇县| 曲靖市| 从化市| 双城市| 玛纳斯县| 泽库县| 泾川县| 德格县| 梨树县| 宣恩县| 丰台区| 甘洛县| 页游| 河西区| 苍梧县| 应用必备| 涡阳县| 孝感市| 清涧县| 科技| 荔浦县|