主要由三个文件组成
DynamicService.java
DynamicFeignClientFactory.java
DynamicClient.java
代码
package org.jeecg.modules.cloud.feign;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* Description: 通用接口,里面定义通用方法
* 注意: 由于服务生产者所有的接口的返回值都是json格式的字符串,
* 所以这里的通用接口的返回值最好使用String类型!!!
*/
public interface DynamicService {
/**
* post方法对应的方法
*
* @param url 服务生产者Handler方法请求映射地址
* @param params 服务生产者Handler方法参数
* @return
*/
@PostMapping(value = "{url}")
String executePostRequest(@PathVariable("url") String url, @RequestBody Object params);
@GetMapping(value = "{url}")
String executeGetRequest(@PathVariable("url") String url, @SpringQueryMap Object params);
}
package org.jeecg.modules.cloud.feign;
import org.springframework.cloud.openfeign.FeignClientBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* Description: FeignClient工厂类,根据服务名称创建FeignClient对象(代理对象)
*/
@Component
public class DynamicFeignClientFactory <T>{
private FeignClientBuilder feignClientBuilder;
public DynamicFeignClientFactory(ApplicationContext applicationContext){
this.feignClientBuilder = new FeignClientBuilder(applicationContext);
}
//动态生成feignClient对象(代理对象)
public T getFeignClient(final Class<T> type,String ServiceID){
return this.feignClientBuilder.forType(type,ServiceID).build();
}
}
package org.jeecg.modules.cloud.feign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/*
* Description: 通过FeignClient工厂获取到的FeignClient对象通过指定的请求去调用生产者方法!
*/
@Component
public class DynamicClient {
@Autowired
private DynamicFeignClientFactory<DynamicService> dynamicDynamicFeignClientFactory;
public Object executePostApi(String feignName, String url, Object params) {
DynamicService dynamicService = dynamicDynamicFeignClientFactory.getFeignClient(DynamicService.class, feignName);
return dynamicService.executePostRequest(url, params);
}
public Object executeGetApi(String feignName, String url, Object params) {
DynamicService dynamicService = dynamicDynamicFeignClientFactory.getFeignClient(DynamicService.class, feignName);
return dynamicService.executeGetRequest(url, params);
}
}
DynamicClient 提供了两个方法 get 和 post