Python对接Java Rest接口简例

您所在的位置:网站首页 java和python可以互调吗 Python对接Java Rest接口简例

Python对接Java Rest接口简例

2023-10-21 12:48| 来源: 网络整理| 查看: 265

文章目录 前言代码简例请求接收解析测试方法 后语

前言

其实大部分接口服务都应该是与语言无关,只是部分重量级后端的实现还需要一些老牌语言。本文就仅仅介绍下Python向Java接口发送请求的一个简短过程,主要是Python代码,Java接口服务涉及到embed-tomcat,不明细节,绝不妄言。

代码简例 请求

简单一个Python类,用于封装请求传参。至于为什么属性名是驼峰式的,后面会说的。

class Person(object): def __init__(self, name, prop_dict): """ 用于传递一个人的相关信息 Args: name: str,姓名 prop_dict: dict{str:str} 人其他属性的自定义字典 """ self.name = name self.propDict = prop_dict

简单一个发送post请求的方法。注意下这里有个对象序列化的类,这样能够保证Person对象被传入时能够被正常序列化。(当然也因为类构造比较简单的原因)

import json import requests class ComplexEncoder(json.JSONEncoder): """ 对象序列化 """ def default(self, obj): return obj.__dict__ def send_post(rest_url, params): """ 以json发送post请求 Args: rest_url: 请求地址 params: 参数 Returns: """ json_data = json.dumps(params, ensure_ascii=False, cls=ComplexEncoder) response_text = requests.post(url=rest_url, data=json_data).text return response_text 接收

Java端服务。这里仅仅提一下传输时的json字符串到Java具体对象的映射相关方法。

/** * 与Python Person类对应的Java类,注意变量名是保持一致,所以Python中才会是驼峰式 */ public class Person { /** * 姓名 */ private String vertexLabel; /** * 人其他属性的自定义字典 */ private Map propDict; public String getVertexLabel() { return vertexLabel; } public void setVertexLabel(String vertexLabel) { this.vertexLabel = vertexLabel; } public Map getPropDict() { return propDict; } public void setPropDict(Map propDict) { this.propDict = propDict; } }

解析json字符串到对应对象,使用fastjson。

private T getParams(String jsonStr, Class clazz) { JSONObject jsonObject = JSON.parseObject(jsonStr); return jsonObject.toJavaObject(clazz); } 解析

自定义一个简单的异常类,用于统一处理错误信息。

class ResponseErrException(Exception): def __init__(self, value): self.value = value def __str__(self): return self.value

解析消息对应的方法。假设正确后的返回消息json为

{"custom":"success","status":{"code":"000000","text":"请求成功"}}

接口执行抛出异常或者有可预知错误时返回消息json为

{"custom":"","status":{"code":"000010","text":"已存在的人:张三"}} def parse_json(json_rst): """ 解析json,获取返回消息 Args: json_rst: Returns: """ if json_rst is None or json_rst == "": raise ResponseErrException("返回消息为空") try: json_data = json.loads(json_rst, encoding="utf-8") except Exception as e: raise ResponseErrException("解析异常,返回消息:" + json_rst) status_msg = json_data["status"] if "000000" != status_msg["code"]: raise ResponseErrException(status_msg["text"]) return json_data["custom"] 测试方法 if __name__ == "__main__": person = Person("张三", {"age": "18", "height": "175"}) # json_data = json.dumps(person, ensure_ascii=False, cls=ComplexEncoder) # '{"name": "张三", "propDict": {"age": "18", "height": "175"}}' rst_json = send_post("ip:port/test", person) try: rst = parse_data(rst_json) except ResponseErrException as e: print("err:" + e.value) 后语

由于代码涉及的内容有些多,所以都是以片段的形式展示,示例都比较简单,感觉其实也不会有很多营养,估计也就以后自己品品的这个样子~~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3