postman 源码_骚操作,简单修改源码,让你的postman自动生成POJO代码

本文介绍了如何通过修改Postman的源码,实现将响应JSON自动转换为Java和C#的POJO类。通过LocalOverrides功能的尝试和源码的直接编辑,尤其是利用第三方接口进行JSON到代码的转换,实现了这一自动化过程,减少了手动转换的工作量。
摘要由CSDN通过智能技术生成

1aa2c82112c579a937c159596dc2381a.png

修改postman工具的代码生成工具加入response自动生成POJO代码

b58d37ba8e4d3be1591082d153364f7d.png

如上图可以快速把请求这个动作转成code,减少重复性劳动。

但是有一点我觉得可以优化下 就是返回的json如果也能自动转成代码就好了。

不然在需要把json序列化成java或者csharp的POJO对象时还得自己coding转一遍。

由于最近经常会用到这个功能,虽然我找到一个站点把json复制粘贴进去,然后点个按钮就可以转成POJO,但是我觉得还是有很多重复性的劳动。

对我我这种懒人,postman又没有提供可扩展的功能。该怎么办呢?

分析postman

postman是基于Electron框架的一个产品,如下图可以把ChromeTool打开

984af7024c4a7a484368e1b621634604.png

尝试一:LocalOverrides功能

这个功能可以修改代码后 保存到你的本机磁盘,然后下一次就会检测 如果有设置localOverrides的话就用你修改过后的代码!

结论:postman比较是一个商业工具,它内部有检测机制,开启这个功能就会不能正常使用!所以放弃!

a3bb92b6b966479031c54d72e111793d.png

尝试二:直接修改postman的源码

1.定位到postman的源码如下图是一个asar文件

fb203a04e9e296ddc871a3cffa12b0dd.png

2.安装asar工具解压到本地

安装asar工具

npm install -g asar

52d50a6b1afabc2a5c725f0c2790e571.png

定位到postman的asar目录解压出来

asar extract app.asar app

accffdd80243e6b35fa55f63b25f6231.png

3.找到源码

找源码的过程我就不说了 这里面要实现我上面说的功能 需要修改2个js源码

  • vendor-shared.js --》这是postman的主源码 有几百万行代码
  • postman-code-generators.js --》这个是代码生成的逻辑

4. 修改vendor-shared.js源码

定位到483842行 加入代码

代码的作用:在点击发送请求后,postman拿到代码如果是json格式的话 就存到本地缓存中

5bb24ceda0815d64ec7eab038a044dbe.png
const transformResponseForLanguage = {
  json: function (value) {
    // This unescape step handles escape sequences like -
    // 1. Unicode code points - hexadecimal - fixed length - uD834
    // 2. Special escape characters - /
 // 这里加
 try {
  localStorage.setItem('_current_reponse_json', value);
 } catch (e) {
  
 }
    return Object(_js_modules_services_StringUnescape__WEBPACK_IMPORTED_MODULE_9__["unescape"])(value);
  } };

958ee4d1ed26da7959c8bb9de06c034a.png

4. 修改postman-code-generators.js源码

原理说明:这里是在网上找了一个接口,传json就可以转成代码

这里注意一下,用的xhr,同步的方式调用

(异步的方式postman我测试了不行,因为postman的上游代码是直接拿结果的,改成异步的话上游代码也得改,这个功能其实同步也还好,就比之前稍微慢了1秒左右)

1.定位到632行 这里是生成csharp代码

 //下面加入json转POJO的代码
try {
 var input = localStorage.getItem('_current_reponse_json');
 var code = '';
 if(input){
  var requestType = {
   input : input,
   operationid:"jsontocsharp",
   settings:{
    UsePascalCase:true,
    UseJsonAttributes:false,
    UseFields:false,
    UseJsonPropertyName:false
   }
  };
  var data = JSON.stringify(requestType);
  var xhr = new XMLHttpRequest();
  xhr.addEventListener("readystatechange", function() {
    if(this.readyState === 4) {
   var next = false;
   var result = [];
   for(var i = 0;i< this.responseText.length;i++)
   {
    var item = this.responseText[i];
    if(item == '"'){}
    else if(item == "" || item == "/"){next = true}
    else if(next){next = false,result.push("n")}
    else{result.push(item)}
   }
   code= 'n //Deserialize json response to POJO n'+result.join("").replace('myJsonResponse','response.Content'); 
    }
  });

  xhr.onerror = function () {
         return callback(null, headerSnippet + snippet + footerSnippet);
        }
  xhr.open("POST", "https://json2csharp.com/api/Default",false);
  xhr.setRequestHeader("Accept", "*/*");
  xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
  xhr.setRequestHeader('Content-type', 'application/json');
  xhr.send(data);
  
  return callback(null, headerSnippet + snippet + code + footerSnippet);
 }
} catch (e) {
 return callback(null, headerSnippet + snippet + footerSnippet);
}

2.定位到16668行 这里是生成java代码

//下面加入json转POJO的代码
try {
 var input = localStorage.getItem('_current_reponse_json');
 var code = '';
 if(input){
  var requestType = {
   input : input,
   operationid:"jsontopojo",
   settings:{
    UseProperties:false
   }
  };
  var data = JSON.stringify(requestType);
  var xhr = new XMLHttpRequest();
  xhr.addEventListener("readystatechange", function() {
    if(this.readyState === 4) {
   var next = false;
   var result = [];
   for(var i = 0;i< this.responseText.length;i++)
   {
    var item = this.responseText[i];
    if(item == '"'){}
    else if(item == ""){next = true}
    else if(next){next = false,result.push("n")}
    else{result.push(item)}
   }
   code= 'n //Deserialize json response to POJO n'+result.join("").replace('myJsonResponse','response.Content'); 
    }
  });

  xhr.onerror = function () {
         return callback(null, headerSnippet + snippet + footerSnippet);
        }
  xhr.open("POST", "https://json2csharp.com/api/Default",false);
  xhr.setRequestHeader("Accept", "*/*");
  xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
  xhr.setRequestHeader('Content-type', 'application/json');
  xhr.send(data);
  
  snippet = snippet + code;
 }
} catch (e) {
 
}

cefd5da1c1c3c50da9f83063c30ca165.png

5.源码修改后重新打包成asar文件

asar pack app app.asar

216d5b3be79760aaf399de9aec46ff9f.png

搞定验证结果

java的方式

9a9f23cb5380943993a87fed89f62e83.png

csharp的方式

1e91b7c951197363df26ceba454540b9.png

8a3d54fd0cd7ef317fb95c6d7370c887.png

作者:鱼东东

来源:【Hook】postman工具的代码生成工具让它锦上添花

推荐

强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值