当使用 @FeignClient 满足不了需求时, 可以使用Feign Builder API创建客户端

代码示例(自行领悟):

import feign.Contract;import feign.Feign;import feign.codec.Decoder;import feign.codec.Encoder;import lombok.RequiredArgsConstructor;import org.springframework.cloud.openfeign.FeignClientsConfiguration;import org.springframework.context.annotation.Import;import org.springframework.stereotype.Service;import org.springframework.web.bind.annotation.GetMapping;/**
 * Feign - service
 *
 * @author Tan
 * @version 1.0 2020/12/23
 */@Service@RequiredArgsConstructor@Import(FeignClientsConfiguration.class)public class FeignClientsService {private final Decoder decoder;private final Encoder encoder;private final Contract contract;/**
     * 创造 Feign Client
     *
     * @param apiType Feign interface
     * @param url     base url
     * @param <T>     Feign Client
     * @return Feign Client
     */public <T> T creating(Class<T> apiType, String url) {return Feign.builder()
                .encoder(encoder)
                .decoder(decoder)
                .contract(contract)
                .target(apiType, url);
    }public interface FooApi {@GetMappingString baidu();
    }

}复制代码

Run

    @Autowired(required = false)
    private FeignClientsService feignClientsService;

    @Test
    void contextLoads() {
        FeignClientsService.FooApi authApi = feignClientsService.creating(FeignClientsService.FooApi.class, "https://www.baidu.com/");
        log.info("authApi: {}", authApi);

        String result = authApi.baidu();

        log.info("Result: {}", result);

    }复制代码

执行结果

手动创建FeignClient_FeignClient