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);
    }

}

没啥技术含量,主要就是将接口定义和工具代码简单解耦

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值