修改postman工具的代碼生成工具加入response自動生成POJO代碼
如上圖可以快速把請求這個動作轉(zhuǎn)成code,減少重復(fù)性勞動。
但是有一點我覺得可以優(yōu)化下 就是返回的json如果也能自動轉(zhuǎn)成代碼就好了。
不然在需要把json序列化成java或者csharp的POJO對象時還得自己coding轉(zhuǎn)一遍。
由于最近經(jīng)常會用到這個功能,雖然我找到一個站點把json復(fù)制粘貼進去,然后點個按鈕就可以轉(zhuǎn)成POJO,但是我覺得還是有很多重復(fù)性的勞動。
對我我這種懶人,postman又沒有提供可擴展的功能。該怎么辦呢?
分析postman
?postman是基于Electron框架的一個產(chǎn)品,如下圖可以把ChromeTool打開
嘗試一:LocalOverrides功能
這個功能可以修改代碼后 保存到你的本機磁盤,然后下一次就會檢測 如果有設(shè)置localOverrides的話就用你修改過后的代碼!
結(jié)論:postman比較是一個商業(yè)工具,它內(nèi)部有檢測機制,開啟這個功能就會不能正常使用!所以放棄!?
嘗試二:直接修改postman的源碼
1.定位到postman的源碼如下圖是一個asar文件
2.安裝asar工具解壓到本地
安裝asar工具
npm install -g asar
定位到postman的asar目錄解壓出來
asar extract app.asar app
3.找到源碼
找源碼的過程我就不說了 這里面要實現(xiàn)我上面說的功能 需要修改2個js源碼
4. 修改vendor-shared.js源碼
定位到483842行 加入代碼
代碼的作用:在點擊發(fā)送請求后,postman拿到代碼如果是json格式的話 就存到本地緩存中
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);} };
4. 修改postman-code-generators.js源碼
原理說明:這里是在網(wǎng)上找了一個接口,傳json就可以轉(zhuǎn)成代碼
這里注意一下,用的xhr,同步的方式調(diào)用
(異步的方式postman我測試了不行,因為postman的上游代碼是直接拿結(jié)果的,改成異步的話上游代碼也得改,這個功能其實同步也還好,就比之前稍微慢了1秒左右)
定位到632行 這里是生成csharp代碼
//下面加入json轉(zhuǎn)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);
}
定位到16668行 這里是生成java代碼
//下面加入json轉(zhuǎn)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) {}
5.源碼修改后重新打包成asar文件
asar pack app app.asar
搞定驗證結(jié)果
java的方式
csharp的方式
原文地址:https://www.cnblogs.com/yudongdong/p/14256060.html?
總結(jié)
以上是生活随笔為你收集整理的【Hook】postman工具的代码生成工具让它锦上添花的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。