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. 源码
- 万恶之源
- 优化后的源码及jar包
- jar包安装部署参考:eolinker接口测试平台的安装部署
[结束,拜拜] …