Feign简单使用教程 2种传参方式:表单传参 json传参
·
参考文档:
https://github.com/OpenFeign/feign
https://github.com/OpenFeign/feign-form
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);
}
}
没啥技术含量,主要就是将接口定义和工具代码简单解耦
更多推荐
已为社区贡献7条内容
所有评论(0)