原生feign调用第三方接口

最近做一个小项目,小到只有一个页面,和几个接口而已。

因为项目是自己一个人在做,所以所有的定义都可以自己做主。

项目的目的是为了推送给第三方页面收集到的数据,所以对接是重头戏。

之前对接过各种第三方短信接口,用的无非是httpClient的get/post,用多了就想换一个技术熟悉一下。

一、引入依赖

啥也不说,先引入一堆东西,不是每一个都有用,但是用到了就很方便。

core:是必须要引的,核心依赖。

gson/jackson:gson我的代码中有用到,处理json数据。

io.github.openfeignfeign-core9.5.0

com.netflix.feignfeign-gson8.18.0

io.github.openfeignfeign-slf4j9.5.0

io.github.openfeignfeign-hystrix9.5.0

io.github.openfeignfeign-jackson9.5.0

二、写接口

下面这个接口是免费的,公开的,所以应该不会涉及到利益问题。

package com.geewise.ddsp.phonecollect.api;import com.alibaba.fastjson.JSONObject;
import feign.Param;
import feign.RequestLine;import java.net.MalformedURLException;/*** 手机号查询地区*/
public interface DetailPhoneClient {/*** http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel=13322222222&qq-pf-to=pcqq.c2c* response:{"response":{"13322222222":{"detail":{"area":[{"city":"大连"}],"province":"辽宁","type":"domestic","operator":"电信"},"location":"辽宁大连电信"}},"responseHeader":{"status":200,"time":1539141421138,"version":"1.1.0"}}* @param tel* @return*/@RequestLine("GET /open/location?tel={tel}&qq-pf-to=pcqq.c2c")JSONObject getDetailByPhone(@Param(value = "tel") String tel);
}

三、使用

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

四、深入理解

会用了,再来了解一下。

权威的宝典:github-openfeign(由于这个写的比较通俗易懂,又比较权威,所以代码就不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结合的怎么用


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部