参考文档:

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

}

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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐