日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

feign調(diào)用傳遞請(qǐng)求頭

作者:知知之之 更新時(shí)間: 2022-07-16 編程語(yǔ)言

通過(guò)攔截器

通過(guò)實(shí)現(xiàn)Feign的RequestInterceptor接口,重寫(xiě)里面的apply方法,為RequestTemplate添加請(qǐng)求頭信息

@Component
public class FeignClientsConfigurationCustom implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
    // 此種方式是線(xiàn)程安全的
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
    // 不為空時(shí)取出請(qǐng)求中的header 原封不動(dòng)的設(shè)置到feign請(qǐng)求中
        if (null != attributes) {
            HttpServletRequest request = attributes.getRequest();
            if (null != request) {
        // 遍歷設(shè)置 也可從request取出整個(gè)Header 寫(xiě)到RequestTemplate 中
                Enumeration<String> headerNames = request.getHeaderNames();
                if (headerNames != null) {
                    while (headerNames.hasMoreElements()) {
                        String name = headerNames.nextElement();
                        String values = request.getHeader(name);
                        requestTemplate.header(name, values);
                    }
                }
            }
        }
    }
}

@Headers注解

@FeignClient(name = "testClient", configuration = FeignClientsConfigurationCustom.class)
public interface testServer{

    @GetMapping("/test")
    @Headers({"Content-Type: application/json","Accept: application/json"})
    String test(@RequestParam String param);
}

異步

無(wú)法直接通過(guò)獲取HttpServletRequest來(lái)獲取Header,那么可以稍微改造一下,在原來(lái)的基礎(chǔ)上添加一個(gè)攔截器。 所有的請(qǐng)求過(guò)來(lái)的時(shí)候,在攔截器中將Header先取出來(lái),然后設(shè)置到本線(xiàn)程私有的Map中。

原來(lái)的apply方法在提交請(qǐng)求的時(shí)候再通過(guò)ThreadLocal提供的remove方法,清除掉。

原文鏈接:https://blog.csdn.net/weixin_35973945/article/details/125806849

欄目分類(lèi)
最近更新