原生feign调用第三方接口
最近做一个小项目,小到只有一个页面,和几个接口而已。
因为项目是自己一个人在做,所以所有的定义都可以自己做主。
项目的目的是为了推送给第三方页面收集到的数据,所以对接是重头戏。
之前对接过各种第三方短信接口,用的无非是httpClient的get/post,用多了就想换一个技术熟悉一下。
一、引入依赖
啥也不说,先引入一堆东西,不是每一个都有用,但是用到了就很方便。
core:是必须要引的,核心依赖。
gson/jackson:gson我的代码中有用到,处理json数据。
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</artifactId> <version>9.5.0</version> </dependency> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-gson</artifactId> <version>8.18.0</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-slf4j</artifactId> <version>9.5.0</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-hystrix</artifactId> <version>9.5.0</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-jackson</artifactId> <version>9.5.0</version> </dependency>
二、写接口
下面这个接口是免费的,公开的,所以应该不会涉及到利益问题。
三、使用
在controller层中可以直接调用,直接上代码 。
最重要的地方就是Feign.builder()这一段,下面是判断,因为是第三方的,不是自己写的接口,判断的比较细了,有点啰嗦。
/** * 用手机号查询所属地域 * * @param phone 手机号 * @return 所属地域 */ private String getCityByPhone(String phone) { DetailPhoneClient detailPhoneClient = Feign.builder() .decoder(new GsonDecoder()) .target(DetailPhoneClient.class, "http://mobsec-dianhua.baidu.com/dianhua_api"); JSONObject detailByPhone = detailPhoneClient.getDetailByPhone(phone); logger.info("查询手机号所属地区:" + detailByPhone); // 获取手机号信息的数据 if (!detailByPhone.containsKey("response")) { return null; } JSONObject response = detailByPhone.getJSONObject("response"); if (!response.containsKey(phone)) { return null; } JSONObject phoneDetail = response.getJSONObject(phone); if (!phoneDetail.containsKey("detail")) { return null; } JSONObject detail = phoneDetail.getJSONObject("detail"); if (!detail.containsKey("area")) { return null; } JSONArray area = detail.getJSONArray("area"); if (area.size() == 0) { return null; } JSONObject cityJsonObject = area.getJSONObject(0); if (!cityJsonObject.containsKey("city")) { return null; } return cityJsonObject.getString("city"); }
四、深入理解
会用了,再来了解一下。
权威的宝典:(由于这个写的比较通俗易懂,又比较权威,所以代码就不copy过来了,省时省力)
1、Gson/Jackson(处理json格式的数据)两者都包括一个编码器,一个解码器
2、Sax/JAXB(处理xml格式的数据,因为我还没有接触到这种格式的,毕竟现在json比较流行嘛,只能先写到这里,用到再说)
3、OkHttp,JAX-RS,Ribbon(负载均衡),Hystrix(熔断机制)。这几个都没有用到,等用到了 ,再上官网上查吧
4、可以在接口上添加header,具体的可以上githua上面查
@Headers("Content-Type: application/xml")
有时间写一下和cloud结合的怎么用
上一篇:
IDEA上Java项目控制台中文乱码