
文章插圖
1. 問(wèn)題描述Java平臺(tái)要調(diào)用Pyhon平臺(tái)已有的算法 , 為了減少耦合度 , 采用Pyhon平臺(tái)提供Restful 接口 , Java平臺(tái)負(fù)責(zé)來(lái)調(diào)用 , 采用Http+Json格式交互 。
2. 解決方案2.1 JAVA平臺(tái)側(cè)2.1.1 項(xiàng)目代碼public static String invokeAlgorithm(String url, HashMap params) throws Exception {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.parseMediaType("application/json; charset=UTF-8"));headers.add("Accept", MediaType.APPLICATION_JSON.toString());HttpEntity<String> httpEntity = new HttpEntity<>(JSONObject.toJSONString(params), headers);RestTemplate rst = new RestTemplate();ResponseEntity<String> stringResponseEntity = rst.postForEntity(url, httpEntity, String.class);return stringResponseEntity.getBody();}2.1.2 代碼解析兩個(gè)入?yún)ⅲ簎rl為Python提供restful調(diào)用方法;params參數(shù) , 項(xiàng)目中參數(shù)使用了map , 然后將map轉(zhuǎn)成了Json , 與Python服務(wù)器約定Json格式傳輸 。
2.2 python平臺(tái)側(cè)經(jīng)過(guò)反復(fù)調(diào)研與深思熟慮的考慮后 , 決定采用flask提供Rest接口 , flask 是一款非常流行的python web框架 , 微框架、簡(jiǎn)潔 , 社區(qū)活躍等 。(其實(shí)是因?yàn)榘惭b的Anaconda自帶了flask , 一配置一啟動(dòng)好了 , 就是這么巧)
2.2.1 項(xiàng)目代碼# -*- coding: utf-8 -*-from flask import Flask, request, send_from_directoryfrom k_means import execapp = Flask(__name__)import logging@app.route('/')def index():return "Hello, World!"# k-means算法@app.route('/getKmeansInfoByPost', methods=['POST'])def getKmeansInfoByPost():try:result = exec(request.get_json())except IndexError as e:logging.error(str(e))return 'exception:' + str(e)except KeyError as e:logging.error(str(e))return 'exception:' + str(e)except ValueError as e:logging.error(str(e))return 'exception:' + str(e)except Exception as e:logging.error(str(e))return 'exception:' + str(e)else:return result@app.route("/<path:filename>")def getImages(filename):return send_from_directory(dirpath, filename, as_attachment=True)if __name__ == '__main__':app.run(host="0.0.0.0", port=5000, debug=True)2.2.2 代碼解析代碼為真實(shí)項(xiàng)目示例 , 去掉了一些配置而已 , 示例中包含三個(gè)方法 , 分別說(shuō)一下
(1)最基本Rest接口:helloword# -*- coding: utf-8 -*-from flask import Flaskapp = Flask(__name__)@app.route('/')def index():return "Hello, World!"if __name__ == '__main__':app.run(host="0.0.0.0", port=5000, debug=True)(2)調(diào)用其他python文件的Rest接口# -*- coding: utf-8 -*-from flask import Flask, requestfrom k_means import execapp = Flask(__name__)import logging# k-means算法@app.route('/getKmeansInfoByPost', methods=['POST'])def getKmeansInfoByPost():try:result = exec(request.get_json())except IndexError as e:logging.error(str(e))return 'exception:' + str(e)except KeyError as e:logging.error(str(e))return 'exception:' + str(e)except ValueError as e:logging.error(str(e))return 'exception:' + str(e)except Exception as e:logging.error(str(e))return 'exception:' + str(e)else:return resultif __name__ == '__main__':app.run(host="0.0.0.0", port=5000, debug=True)說(shuō)明:1.接收POST方法;2. 從request獲取java傳過(guò)來(lái)的參數(shù) , 對(duì)應(yīng)上面的java調(diào)用代碼
(3) 文件下載Rest接口# -*- coding: utf-8 -*-from flask import Flask, send_from_directoryapp = Flask(__name__)@app.route("/<path:filename>")def getImages(filename):return send_from_directory(dirpath, filename, as_attachment=True)if __name__ == '__main__':app.run(host="0.0.0.0", port=5000, debug=True)說(shuō)明:1.還是flask框架提供的:send_from_directory
2.dirpath目錄 , 一般可以給個(gè)固定存放目錄 , 調(diào)用的時(shí)候只用給文件名稱就可以直接下載對(duì)應(yīng)文件 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 最常用的遠(yuǎn)程登錄協(xié)議 ftp的含義是遠(yuǎn)程登錄協(xié)議
- 學(xué)java好嗎 學(xué)java好嗎
- html簡(jiǎn)易計(jì)算器代碼 javascript計(jì)算器代碼
- 遠(yuǎn)程控制木馬軟件:哪個(gè)遠(yuǎn)程控制軟件免費(fèi)且趕得上teamviewer?
- 手機(jī)遠(yuǎn)程監(jiān)控電腦的原理
- 面試回答技巧 java面試技巧自我介紹
- 中高級(jí)java開發(fā)面試題 java高級(jí)面試題庫(kù)
- java入門簡(jiǎn)單小項(xiàng)目 java項(xiàng)目搭建流程
- java冒泡排序 javascript的全局函數(shù)有哪些
- 講解java中常見的數(shù)據(jù)類型 java中數(shù)據(jù)類型轉(zhuǎn)換
