Feign简单使用教程 2种传参方式:表单传参 json传参
参考文档:
Maven依赖
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</artifactId> <version>10.0.1</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-gson</artifactId> <version>8.16.2</version> </dependency>
工具类
@Component public class MyFeignUtil { private static final String URL = "http://localhost:9002"; public static Builder builder = null; builder = Feign.builder()// // .decoder(new GsonDecoder(new GsonBuilder().create()))//将返回的Json字符串转换成对象 // .decoder(new StringDecoder())// 只返回Json字符串 (可注释掉) .encoder(new GsonEncoder());// 把入参对象解析成-Json形式;表单形式可注释 } @SuppressWarnings({ "rawtypes", "unchecked" }) static <T> T get(Class clazz) { return (T) builder.target(clazz, KeDaXunFeiFeignUtil.URL); } /* *把对象转换成 Map FastJson 如果要转为参数的命名方式:驼峰->下划线 也可在这一步进行操作 */ public static Map<String, Object> toMap(Object object) { JSONObject jsonObject = (JSONObject) JSON.toJSON(object); Set<Entry<String, Object>> entrySet = jsonObject.entrySet(); Map<String, Object> map = new HashMap<String, Object>(); for (Entry<String, Object> entry : entrySet) { map.put(entry.getKey(), entry.getValue()); } return map; } /** 任务管理接口 */ @Bean public static TaskClient getTaskClient() { return get(TaskClient.class); } }
接口
Json形式
public interface TaskClient { /** * 查询任务列表 */ @RequestLine("POST /v1/kxjl/task/searchList") @Headers("Content-Type: application/json") // 返回值-是字符串 String searcList(SearchParam param); // 返回值-是对象 // RespMsg<SearchResult> searchList(SearchParam param); }
表单形式
public interface TaskClient { /** * 查询任务列表 */ @RequestLine("POST /v1/kxjl/task/searchList") String searchList(@QueryMap Map param); }
测试类
public class TaskClientTest { TaskClient client = MyFeignUtil.getTaskClient(); @Test public void testTaskList() { // 参数构建 SearchParam param = new SearchParam(); param.setPageIndex(1); param.setPageSize(10); param.setTaskName("xxxx任务"); // 调用 // Json方式 String result = client.searchList(param); // 表单方式 // String result = client.searchList(MyFeignUtil.toMap(param)); System.out.println("返回结果:" + result); } }
没啥技术含量,主要就是将接口定义和工具代码简单解耦