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

Spring 使用 feign時(shí)設(shè)置header信息的操作

 更新時(shí)間:2021年08月04日 08:38:17   作者:糊涂小農(nóng)  
這篇文章主要介紹了Spring 使用 feign時(shí)設(shè)置header信息的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring feign時(shí)設(shè)置header信息

最近使用 SpringBoot 項(xiàng)目,把一些 http 請(qǐng)求轉(zhuǎn)為 使用 feign方式。但是遇到一個(gè)問題:個(gè)別請(qǐng)求是要設(shè)置header的。

于是,查看官方文檔和博客,大致推薦兩種方式。也可能是我沒看明白官方文檔。

接口如下:

@FeignClient(url ="XX_url", value ="XXService")
public interface XXService {
 
    @RequestMapping(value ="/xx", method = RequestMethod.POST)
    @Headers({"Content-Type: application/json","Accept: application/json"})
    String sendDing(String params);
}

1. 使用Headers注解。直接在請(qǐng)求上或者在類上添加

這種方式經(jīng)過嘗試,沒有作用。暫時(shí)不清楚原因。

2. 通過實(shí)現(xiàn)RequestInterceptor接口,完成對(duì)所有的Feign請(qǐng)求,設(shè)置Header

@Component
public class FeginClientConfig {
    @Bean
    public RequestInterceptor headerInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                    // 小示例,沒什么卵用
                    requestTemplate.header("Content-Type","application/json");
            }
        };
    }
 
    @Bean
    public Logger.Level level() {
        return Logger.Level.FULL;
    } 
}

這種方式,是針對(duì)所有feign請(qǐng)求進(jìn)行攔截,設(shè)置Header,不適于我的需求。

后來發(fā)現(xiàn)其實(shí)我的思路走偏了。咨詢了一個(gè)同事,既然使用的是RequestMapping注解。那么直接使用RequestMapping注解的header屬性就可以了。如下:

@RequestMapping(value ="/xx", method = RequestMethod.POST, headers = {"content-type=application/x-www-form-urlencoded"})

有一點(diǎn)需要注意:content-type=application/x-www-form-urlencoded。此時(shí),方法里接收的參數(shù),就不能直接是一個(gè)對(duì)象(Map等)。不然還是會(huì)默認(rèn)

content-type為 application/json.

@RequestMapping(value ="/xx", method = RequestMethod.POST, headers = {"content-type=application/x-www-form-urlencoded"})
String login(@RequestParam("username") String username,@RequestParam("password") String password;

Feign動(dòng)態(tài)設(shè)置Header

Feign調(diào)用接口:

/**
 * @author Liangzhifeng
 * date: 2018/9/13
 */
public interface UserInfoFeignClient {

    /**
     * 根據(jù)token獲取用戶信息
     * @param token
     * @return
     */
    @RequestMapping(value = "/user/info/1.0", method = RequestMethod.POST)
    Object getUserInfoByToken(@RequestParam("token") String token);
}

/**
 * @author Liangzhifeng
 * date: 2018/9/15
 */
@Component
public class AuthorityConfig {

    /**
     * 授權(quán)信息Header的key
     */
    public static final String OAUTH_KEY = "token";

    /**
     * 授權(quán)信息Header的值的前綴
     */
    public static final String OAUTH_VALUE_PREFIX = "Bearer ";

	// GlobalConstant.AUTHORITY_SERVICE_LINK  : 服務(wù)的名稱

    @Autowired
    private Client client;

    public UserInfoFeignClient userInfoFeignClient(String token) {
        UserInfoFeignClient authorityServiceLoginInvoker = Feign.builder().client(client)
                .encoder(new GsonEncoder())
                .decoder(new GsonDecoder())
                .contract(new SpringMvcContract())
                .requestInterceptor(template -> template.header(OAUTH_KEY, OAUTH_VALUE_PREFIX + token))
                .target(UserInfoFeignClient.class, GlobalConstant.AUTHORITY_SERVICE_LINK);
        return authorityServiceLoginInvoker;
    }
}

接口調(diào)用:

@Autowired
private AuthorityConfig authorityConfig;

/**
 * 根據(jù)token獲取用戶信息
 *
 * @param token 用戶登錄的授權(quán)token
 * @return 用戶信息JSON
 */
public Object getUserInfo(String token) {
    try {
        Object userInfo = authorityConfig.userInfoFeignClient(token).getUserInfoByToken(token);
        return userInfo;
    } catch (Exception e) {
        log.info("獲取用戶信息異常", e);
        return null;
    }
}

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

相關(guān)文章

  • Java 多線程死鎖的產(chǎn)生以及如何避免死鎖

    Java 多線程死鎖的產(chǎn)生以及如何避免死鎖

    這篇文章主要介紹了Java 多線程死鎖的產(chǎn)生以及如何避免死鎖,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java中CAS機(jī)制實(shí)現(xiàn)方法詳解

    Java中CAS機(jī)制實(shí)現(xiàn)方法詳解

    傳統(tǒng)的并發(fā)控制手段如synchronized和ReentrantLock雖有效防止資源競(jìng)爭(zhēng),卻可能引起性能開銷,相比之下,CAS(CompareAndSwap)提供一種輕量級(jí)的樂觀鎖策略,通過硬件級(jí)別的原子指令實(shí)現(xiàn)無(wú)鎖并發(fā),提高性能,需要的朋友可以參考下
    2024-09-09
  • Mybatis如何根據(jù)List批量查詢List結(jié)果

    Mybatis如何根據(jù)List批量查詢List結(jié)果

    這篇文章主要介紹了Mybatis如何根據(jù)List批量查詢List結(jié)果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java String、StringBuilder和StringBuffer的區(qū)別詳解

    java String、StringBuilder和StringBuffer的區(qū)別詳解

    這篇文章主要介紹了java String、StringBuilder和StringBuffer的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • java多線程編程之join方法的使用示例

    java多線程編程之join方法的使用示例

    join方法的功能就是使異步執(zhí)行的線程變成同步執(zhí)行。也就是說,當(dāng)調(diào)用線程實(shí)例的start方法后,這個(gè)方法會(huì)立即返回,如果在調(diào)用start方法后后需要使用一個(gè)由這個(gè)線程計(jì)算得到的值,就必須使用join方法
    2014-01-01
  • Spring Boot中配置文件application.properties使用

    Spring Boot中配置文件application.properties使用

    這篇文章主要介紹了Spring Boot中配置文件application.properties使用及spring boot讀取application.properties文件的方式,需要的朋友參考下吧
    2018-01-01
  • Java中BufferedReader類獲取輸入輸入字符串實(shí)例

    Java中BufferedReader類獲取輸入輸入字符串實(shí)例

    這篇文章主要介紹了Java中BufferedReader類獲取輸入輸入字符串實(shí)例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java annotation元注解原理實(shí)例解析

    Java annotation元注解原理實(shí)例解析

    這篇文章主要介紹了Java annotation元注解原理實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 關(guān)于為何說JAVA中要慎重使用繼承詳解

    關(guān)于為何說JAVA中要慎重使用繼承詳解

    Java繼承是面向?qū)ο蟮淖铒@著的一個(gè)特征,然而下面這篇文章主要給大家介紹了關(guān)于為何說JAVA中要慎重使用繼承的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 詳解Java打包及上傳到私服務(wù)的方法

    詳解Java打包及上傳到私服務(wù)的方法

    這篇文章主要介紹了Java打包及上傳到私服務(wù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01

最新評(píng)論

秭归县| 大名县| 西安市| 同仁县| 禄丰县| 囊谦县| 新津县| 稷山县| 富川| 固阳县| 龙川县| 新竹县| 胶州市| 体育| 吉林市| 汉川市| 新乡县| 哈巴河县| 班玛县| 榆中县| 花垣县| 彩票| 调兵山市| 桂林市| 门源| 唐河县| 六枝特区| 五原县| 祁连县| 建德市| 红桥区| 新宁县| 大理市| 若羌县| 收藏| 长海县| 黑龙江省| 蓬溪县| 东源县| 十堰市| 陇南市|