eolinker 全网最新优化版本 java版 [由415问题引发的一系列修复]

一、 问题起源

同事安利前公司使用的eolinker api管理工具功能很强大,但是在下载到最后一版eolinker开源版本java版4.0的jar包后,部署到服务器上测试时,调用接口测试出现415 Unsupported Media Type报错,如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
已经设置请求类型为application/json,且请求body为标准json格式,但是还是莫名奇妙的报了415。初步怀疑内部代码请求头配置出错。

二、 解决

1. 场景一:反编译获得的jar包,卒

2. 场景二:Github下载源码

从github上下载到源代码后,还是出现同样的问题,进行本地调试:

(1) ContentType
打着断点一步一步调试,最终在Poxy类中,访问前面输入的post测试接口路径前,在将用户端编辑的headers配置进去之后,竟然还调用了一次

  requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

相当于将ContentType重置了:

源jar包中注释,MediaType.APPLICATION_FORM_URLENCODED 表示 application/x-www-form-urlencoded 类型
在这里插入图片描述
该类型不支持json数据传输,所以请求中获取不到body的值。这里把他注释掉。

  • 这里源代码作者try catch之后没有把异常抛出来,也没有记录log,所以jar包部署在服务器上时,日志是看不出错误的。(日志是个好习惯)

在这里插入图片描述

(2) getStatusCode与getStatusCodeValue

解决完上面错误应该就不会出现415了,但是还是报错了,错误信息“200 OK”??(代码已优化,就不重现错误了),log显示String类型错误

Debug发现,在生成要返回给页面的状态码时,用的是返回字符串的responseEntity.getStatusCode(),再将获得的值转化为Integer。获取到的值为“200 OK”,所以转化数字类型会抛运行时异常

改用responseEntity.getStatusCodeValue(),直接返回int类型状态码。
在这里插入图片描述
(3) MultiValueMap与Map

改完访问测试接口成功,但是接口内部规则判定body参数错误。

将接口所在的本地项目也开启debug,发现从eolinker项目传过来的body,每个键值多了一层中括号和引号。

返回eolinker项目,发现生成body使用的参数类型为MultiValueMap。
MultiValueMap与常用的Map的区别是,MultiValueMap为一键对多值,为key:[‘value1’,’value2’,…],而Map为一键对一值,为key:value。requestBody常用的规格为一键对一值。这里修改类型为Map,以满足开发日常需要(为何不直接使用传过来的JSON?可能作者出于什么考虑,这里先使用改动较小的Map,后续再测试)。

接口测试成功:
在这里插入图片描述

三、 eolinker简介及源码

1. 优势

  • (1)对比swagger:不需要侵入到代码内部;支持对复杂的参数和逻辑等做详细的注解说明
  • (2)对比postman:支持对整个项目的接口进行统一管理;可配置多环境(开发、测试等),并根据需要快速切换测试
  • (3)具有权限管控、接口操作记录功能,能很好地支持团队协作、跨团队协作开发
  • (4)拥有强大的mock功能,规则引用mockjs,比较便捷(本人懒,自行百度)
  • (5)可以看一篇简书的安利文《推荐个极好的API接口管理工具:eolinker

2. 不足

  • (1)未发现类似postman的并发测试功能
  • (2)前端使用晦涩的 angularjs 框架,不学习啃下他很难进行进一步的优化、拓展开发(如优化登录失效不提示问题、继续完善权限细化管控)

3. 源码

[结束,拜拜] …

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大迪吃小迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值