Retrofit:使用【Retrofit】优雅地对接第三方接口

在这里插入图片描述

一、前言

  • 在实际开发当中,我们常常会对接一些第三方的接口来获取我们想要的数据。过去以往的对接技术比较繁琐,且不优雅。今天就来介绍一下如何使用:Retrofit 优雅地对接第三方接口。
  • 今天介绍的这款:Retrofit 是由 github作者: LianjiaTech 发布的一个与 SpringBoot 整合的项目,使用起来比较简单,功能丰富,代码也比较优雅。
  • 项目地址:github: https://github.com/LianjiaTech/retrofit-spring-boot-starter

二、Retrofit 的介绍

  • Retrofit 是适用于 AndroidJava 且类型安全的 HTTP 客户端,其最大的特性的是支持通过接口的方式发起 HTTP 请求。而 Spring-Boot 是使用最广泛的 Java 开发框架,但是 Retrofit 官方没有支持与 Spring-Boot 框架快速整合,因此 LianjiaTech:github 作者他们开发了 Retrofit-Spring-Boot-Starter
  • retrofit-spring-boot-starter 实现了 RetrofitSpring-Boot 框架快速整合,并且支持了诸多功能增强,极大简化开发。

三、HTTP请求相关注解

  • HTTP 请求相关注解,详细信息可参考官方文档:retrofit retrofit:官方文档,以下是一个简单的说明。
  • 请求方式:@GET @HEAD @POST @PUT @DELETE @OPTIONS @HTTP
  • 请求头:@Header @HeaderMap @Headers
  • 查询参数:@Query @QueryMap @QueryName
  • 路径参数:@Path
  • 形式编码参数:@Field @FieldMap @FormUrlEncoded
  • 请求体:@Body
  • 上传文件:@Multipart @Part @PartMap
  • 网址参数:@Url

四、具体使用

  • 这里我就直接演示 Retrofit 是如何具体使用的,详细的具体参数可参考上方 github 项目,里面有具体的介绍。

  • 由于我们这个项目会对接大量的第三方接口,所以我们都会归类起来针对一个具体的功能建一个 interface,然后去对接第三方不同的接口,最终哪里用到直接注入对应接口即可,通过Service调用具体方法嵌入到业务中。

  • 接口的基本请求 IP直接用这个自定义注解,里面用这个 baseUrl 即可

在这里插入图片描述

  • baseUrl 我们直接写在配置里面会好一些,这样可以正对不同环境进行变换,而不是直接写死

在这里插入图片描述

  • 关于上图中 @Sign 自定义注解的作用
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@InterceptMark
public @interface Sign {

    String cookie() default "";

    /**
     * 拦截器匹配路径
     *
     * @return
     */
    String[] include() default {"/**"};

    /**
     * 拦截器排除匹配,排除指定路径拦截
     *
     * @return
     */
    String[] exclude() default {};

    /**
     * 处理该注解的拦截器类
     * 优先从spring容器获取对应的Bean,如果获取不到,则使用反射创建一个!
     * 
     * 注意:BasePathMatchInterceptor:这个抽象方法在github项目中有具体的源码,可以直接搜索查看和使用
     * @return
     */
    Class<? extends BasePathMatchInterceptor> handler() default SignInterceptor.class;
}

1、添加

  • 这里对接是第三方的一个添加接口,其实就是跟我们平时在 Controller 层写接口一样的。添加的话我们就用:@POST,里面的参数就是第三的 URL,然后就是定义出参入参参数。
  • 至于如何快速地获取第三方接口接口生成实体类,可以看我这篇文章:IDEA:插件系列:GsonFormat插件的具体使用与介绍
  • 由于添加入参一般就是 JSON 数据,然后我们按照上面介绍的 HTTP 具体注解介绍来对号入座加上就可以了。这个 @Header 也是必填参数,具体可以根据对接的第三方接口参数结构来写。

在这里插入图片描述

2、删除

在这里插入图片描述

3、修改

在这里插入图片描述

4、查询

  • 这个查询是不带分页的

在这里插入图片描述

  • 带分页的

在这里插入图片描述

5、具体测试

  • 那么我们在接口中写好这些方法后,如何知道是否写的真确呢,那么这时我们就需要写一个测试类用Postman测试一下,确保接口能返回我们想要的数据就好。
  • 下面只是举例,具体可以根据自己的项目来编写测试类
@Slf4j
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Lazy))
@RequestMapping("docking/vpn")
public class DockingVpnController {

    private final DockingVpnService dockingVpnService;

    private final UserFeign userFeign;

    @PostMapping("/add")
    public R<DockingAddVpnGatewayDto> addVpnGatewayInfo(@RequestBody @Valid AddVpnGatewayParam param) {
        //占时使用,测试需手动写入UserId
        Long userId = 0L;
        UserInfoEntity userInfoEntity = userFeign.getById(userId).getData();
        String keystoneToken = getTokenByUserId(userInfoEntity.getId(), userInfoEntity.getType());
        AddVpnGatewayParam.VpnserviceDTO vpnService = param.getVpnservice();
        DockingAddVpnGatewayDto vpnGatewayDto = dockingVpnService.addVpnGatewayInfo(param, keystoneToken);
        DockingAddVpnGatewayDto.VpnserviceDTO vpnServiceDTO = vpnGatewayDto.getVpnservice();
        vpnServiceDTO
                .setName(vpnService.getName())
                .setRouterId(vpnService.getRouterId());
        return R.success(vpnGatewayDto);

    }

Retrofit 与 Okhttp 区别

总结

  • 总而言之,这个整合后的框架时非常好用的,使用起来不管是新手还是老手都非常容易上手。对接起来也是十分的方便,真的十分感谢整合的原作者。
  • 各位有这个需求的小伙伴,也可以去用一下,真香警告!
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值